On Sat, Jan 21, 2012 at 8:29 PM, Marcel Holtmann <marcel@xxxxxxxxxxxx> wrote: > Hi Octavian, > >> >> +void bt_sock_reclassify_lock(struct sock *sk, int proto) >> >> { >> >> - struct sock *sk = sock->sk; >> >> - >> >> if (!sk) >> >> return; >> > >> > Why are we keeping the !sk check here if we already hand in the sk. It >> > is most likely checked by the caller already. >> > >> >> In rfcomm_sock_create (called from bt_sock_create) sock->sk can be set >> to NULL so I think we should keep the check. > > it has been too long since I looked at this part of the code. You need > to walk me through it why this is still true. > Hi Marcel, In bt_sock_create we have: if (bt_proto[proto] && try_module_get(bt_proto[proto]->owner)) { err = bt_proto[proto]->create(net, sock, proto, kern); bt_sock_reclassify_lock(sock->sk, proto); and create can be rfcomm_sock_create where we have sk = rfcomm_sock_alloc(net, sock, protocol, GFP_ATOMIC); if (!sk) return -ENOMEM; So after calling ->create() sock->sk can be NULL and thus we can call bt_sock_reclassify with a NULL parameter. Does this make sense? Thanks, Tavi -- To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html