SELinux: Fix a potentially uninitialised variable in SELinux hooks
Fix a potentially uninitialised variable in SELinux hooks that's given a pointer to the network address by selinux_parse_skb() passing a pointer back through its argument list. By restructuring selinux_parse_skb(), the compiler can see that the error case need not set it as the caller will return immediately. Signed-off-by: David Howells <dhowells@redhat.com> Signed-off-by: James Morris <jmorris@namei.org>
This commit is contained in:
Родитель
0c0e186f81
Коммит
cf9481e289
|
@ -3539,38 +3539,44 @@ out:
|
|||
#endif /* IPV6 */
|
||||
|
||||
static int selinux_parse_skb(struct sk_buff *skb, struct avc_audit_data *ad,
|
||||
char **addrp, int src, u8 *proto)
|
||||
char **_addrp, int src, u8 *proto)
|
||||
{
|
||||
int ret = 0;
|
||||
char *addrp;
|
||||
int ret;
|
||||
|
||||
switch (ad->u.net.family) {
|
||||
case PF_INET:
|
||||
ret = selinux_parse_skb_ipv4(skb, ad, proto);
|
||||
if (ret || !addrp)
|
||||
break;
|
||||
*addrp = (char *)(src ? &ad->u.net.v4info.saddr :
|
||||
&ad->u.net.v4info.daddr);
|
||||
break;
|
||||
if (ret)
|
||||
goto parse_error;
|
||||
addrp = (char *)(src ? &ad->u.net.v4info.saddr :
|
||||
&ad->u.net.v4info.daddr);
|
||||
goto okay;
|
||||
|
||||
#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE)
|
||||
case PF_INET6:
|
||||
ret = selinux_parse_skb_ipv6(skb, ad, proto);
|
||||
if (ret || !addrp)
|
||||
break;
|
||||
*addrp = (char *)(src ? &ad->u.net.v6info.saddr :
|
||||
&ad->u.net.v6info.daddr);
|
||||
break;
|
||||
if (ret)
|
||||
goto parse_error;
|
||||
addrp = (char *)(src ? &ad->u.net.v6info.saddr :
|
||||
&ad->u.net.v6info.daddr);
|
||||
goto okay;
|
||||
#endif /* IPV6 */
|
||||
default:
|
||||
break;
|
||||
addrp = NULL;
|
||||
goto okay;
|
||||
}
|
||||
|
||||
if (unlikely(ret))
|
||||
printk(KERN_WARNING
|
||||
"SELinux: failure in selinux_parse_skb(),"
|
||||
" unable to parse packet\n");
|
||||
|
||||
parse_error:
|
||||
printk(KERN_WARNING
|
||||
"SELinux: failure in selinux_parse_skb(),"
|
||||
" unable to parse packet\n");
|
||||
return ret;
|
||||
|
||||
okay:
|
||||
if (_addrp)
|
||||
*_addrp = addrp;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Загрузка…
Ссылка в новой задаче