appletalk: Fix potential NULL pointer dereference in unregister_snap_client
register_snap_client may return NULL, all the callers check it, but only print a warning. This will result in NULL pointer dereference in unregister_snap_client and other places. It has always been used like this since v2.6 Reported-by: Dan Carpenter <dan.carpenter@oracle.com> Signed-off-by: YueHaibing <yuehaibing@huawei.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
f261c4e529
commit
9804501fa1
@@ -879,15 +879,24 @@ static struct notifier_block aarp_notifier = {
|
||||
|
||||
static unsigned char aarp_snap_id[] = { 0x00, 0x00, 0x00, 0x80, 0xF3 };
|
||||
|
||||
void __init aarp_proto_init(void)
|
||||
int __init aarp_proto_init(void)
|
||||
{
|
||||
int rc;
|
||||
|
||||
aarp_dl = register_snap_client(aarp_snap_id, aarp_rcv);
|
||||
if (!aarp_dl)
|
||||
if (!aarp_dl) {
|
||||
printk(KERN_CRIT "Unable to register AARP with SNAP.\n");
|
||||
return -ENOMEM;
|
||||
}
|
||||
timer_setup(&aarp_timer, aarp_expire_timeout, 0);
|
||||
aarp_timer.expires = jiffies + sysctl_aarp_expiry_time;
|
||||
add_timer(&aarp_timer);
|
||||
register_netdevice_notifier(&aarp_notifier);
|
||||
rc = register_netdevice_notifier(&aarp_notifier);
|
||||
if (rc) {
|
||||
del_timer_sync(&aarp_timer);
|
||||
unregister_snap_client(aarp_dl);
|
||||
}
|
||||
return rc;
|
||||
}
|
||||
|
||||
/* Remove the AARP entries associated with a device. */
|
||||
|
Reference in New Issue
Block a user