Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jmorris/linux-security

Pull security layer fix from James Morris:
"Smack casting fix"

* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jmorris/linux-security:
Smack: IPv6 casting error fix for 3.11

+11 -13
+11 -13
security/smack/smack_lsm.c
··· 1998 1998 * 1999 1999 * Create or update the port list entry 2000 2000 */ 2001 - static int smk_ipv6_port_check(struct sock *sk, struct sockaddr *address, 2001 + static int smk_ipv6_port_check(struct sock *sk, struct sockaddr_in6 *address, 2002 2002 int act) 2003 2003 { 2004 2004 __be16 *bep; 2005 2005 __be32 *be32p; 2006 - struct sockaddr_in6 *addr6; 2007 2006 struct smk_port_label *spp; 2008 2007 struct socket_smack *ssp = sk->sk_security; 2009 2008 struct smack_known *skp; ··· 2024 2025 /* 2025 2026 * Get the IP address and port from the address. 2026 2027 */ 2027 - addr6 = (struct sockaddr_in6 *)address; 2028 - port = ntohs(addr6->sin6_port); 2029 - bep = (__be16 *)(&addr6->sin6_addr); 2030 - be32p = (__be32 *)(&addr6->sin6_addr); 2028 + port = ntohs(address->sin6_port); 2029 + bep = (__be16 *)(&address->sin6_addr); 2030 + be32p = (__be32 *)(&address->sin6_addr); 2031 2031 2032 2032 /* 2033 2033 * It's remote, so port lookup does no good. ··· 2058 2060 ad.a.u.net->family = sk->sk_family; 2059 2061 ad.a.u.net->dport = port; 2060 2062 if (act == SMK_RECEIVING) 2061 - ad.a.u.net->v6info.saddr = addr6->sin6_addr; 2063 + ad.a.u.net->v6info.saddr = address->sin6_addr; 2062 2064 else 2063 - ad.a.u.net->v6info.daddr = addr6->sin6_addr; 2065 + ad.a.u.net->v6info.daddr = address->sin6_addr; 2064 2066 #endif 2065 2067 return smk_access(skp, object, MAY_WRITE, &ad); 2066 2068 } ··· 2199 2201 case PF_INET6: 2200 2202 if (addrlen < sizeof(struct sockaddr_in6)) 2201 2203 return -EINVAL; 2202 - rc = smk_ipv6_port_check(sock->sk, sap, SMK_CONNECTING); 2204 + rc = smk_ipv6_port_check(sock->sk, (struct sockaddr_in6 *)sap, 2205 + SMK_CONNECTING); 2203 2206 break; 2204 2207 } 2205 2208 return rc; ··· 3033 3034 int size) 3034 3035 { 3035 3036 struct sockaddr_in *sip = (struct sockaddr_in *) msg->msg_name; 3036 - struct sockaddr *sap = (struct sockaddr *) msg->msg_name; 3037 + struct sockaddr_in6 *sap = (struct sockaddr_in6 *) msg->msg_name; 3037 3038 int rc = 0; 3038 3039 3039 3040 /* ··· 3120 3121 return smack_net_ambient; 3121 3122 } 3122 3123 3123 - static int smk_skb_to_addr_ipv6(struct sk_buff *skb, struct sockaddr *sap) 3124 + static int smk_skb_to_addr_ipv6(struct sk_buff *skb, struct sockaddr_in6 *sip) 3124 3125 { 3125 - struct sockaddr_in6 *sip = (struct sockaddr_in6 *)sap; 3126 3126 u8 nexthdr; 3127 3127 int offset; 3128 3128 int proto = -EINVAL; ··· 3179 3181 struct netlbl_lsm_secattr secattr; 3180 3182 struct socket_smack *ssp = sk->sk_security; 3181 3183 struct smack_known *skp; 3182 - struct sockaddr sadd; 3184 + struct sockaddr_in6 sadd; 3183 3185 int rc = 0; 3184 3186 struct smk_audit_info ad; 3185 3187 #ifdef CONFIG_AUDIT