]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blobdiff - net/socket.c
net: socket: Fix potential spectre v1 gadget in sock_is_registered
[mirror_ubuntu-bionic-kernel.git] / net / socket.c
index 0f3ec95ce966cb74e0a50503dbd51be61a035952..a60ab4561e41e1c482397453b77ac24f2fa9e1ad 100644 (file)
@@ -2543,11 +2543,14 @@ int sock_register(const struct net_proto_family *ops)
        }
 
        spin_lock(&net_family_lock);
-       if (rcu_dereference_protected(net_families[ops->family],
-                                     lockdep_is_held(&net_family_lock)))
+       if (rcu_dereference_protected(
+                   net_families[array_index_nospec(ops->family, NPROTO)],
+                   lockdep_is_held(&net_family_lock)))
                err = -EEXIST;
        else {
-               rcu_assign_pointer(net_families[ops->family], ops);
+               rcu_assign_pointer(
+                       net_families[array_index_nospec(ops->family, NPROTO)],
+                       ops);
                err = 0;
        }
        spin_unlock(&net_family_lock);