]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - net/llc/af_llc.c
net: llc: add lock_sock in llc_ui_bind to avoid a race condition
[karo-tx-linux.git] / net / llc / af_llc.c
index cb4fff785cbf5aaad520442dc243ae62dc5750ea..c38d16f22d2a7ff265b8729d43b164312598fd9f 100644 (file)
@@ -142,7 +142,7 @@ static struct proto llc_proto = {
        .name     = "LLC",
        .owner    = THIS_MODULE,
        .obj_size = sizeof(struct llc_sock),
-       .slab_flags = SLAB_DESTROY_BY_RCU,
+       .slab_flags = SLAB_TYPESAFE_BY_RCU,
 };
 
 /**
@@ -311,6 +311,8 @@ static int llc_ui_bind(struct socket *sock, struct sockaddr *uaddr, int addrlen)
        int rc = -EINVAL;
 
        dprintk("%s: binding %02X\n", __func__, addr->sllc_sap);
+
+       lock_sock(sk);
        if (unlikely(!sock_flag(sk, SOCK_ZAPPED) || addrlen != sizeof(*addr)))
                goto out;
        rc = -EAFNOSUPPORT;
@@ -382,6 +384,7 @@ static int llc_ui_bind(struct socket *sock, struct sockaddr *uaddr, int addrlen)
 out_put:
        llc_sap_put(sap);
 out:
+       release_sock(sk);
        return rc;
 }