)]}'
{
  "commit": "cdfbabfb2f0ce983fdaa42f20e5f7842178fc01e",
  "tree": "30aae04d074592571b8cb36d001d5d10c7181652",
  "parents": [
    "81dca07b3be974e81cff250a19282473d67a870b"
  ],
  "author": {
    "name": "David Howells",
    "email": "dhowells@redhat.com",
    "time": "Thu Mar 09 08:09:05 2017 +0000"
  },
  "committer": {
    "name": "David S. Miller",
    "email": "davem@davemloft.net",
    "time": "Thu Mar 09 18:23:27 2017 -0800"
  },
  "message": "net: Work around lockdep limitation in sockets that use sockets\n\nLockdep issues a circular dependency warning when AFS issues an operation\nthrough AF_RXRPC from a context in which the VFS/VM holds the mmap_sem.\n\nThe theory lockdep comes up with is as follows:\n\n (1) If the pagefault handler decides it needs to read pages from AFS, it\n     calls AFS with mmap_sem held and AFS begins an AF_RXRPC call, but\n     creating a call requires the socket lock:\n\n\tmmap_sem must be taken before sk_lock-AF_RXRPC\n\n (2) afs_open_socket() opens an AF_RXRPC socket and binds it.  rxrpc_bind()\n     binds the underlying UDP socket whilst holding its socket lock.\n     inet_bind() takes its own socket lock:\n\n\tsk_lock-AF_RXRPC must be taken before sk_lock-AF_INET\n\n (3) Reading from a TCP socket into a userspace buffer might cause a fault\n     and thus cause the kernel to take the mmap_sem, but the TCP socket is\n     locked whilst doing this:\n\n\tsk_lock-AF_INET must be taken before mmap_sem\n\nHowever, lockdep\u0027s theory is wrong in this instance because it deals only\nwith lock classes and not individual locks.  The AF_INET lock in (2) isn\u0027t\nreally equivalent to the AF_INET lock in (3) as the former deals with a\nsocket entirely internal to the kernel that never sees userspace.  This is\na limitation in the design of lockdep.\n\nFix the general case by:\n\n (1) Double up all the locking keys used in sockets so that one set are\n     used if the socket is created by userspace and the other set is used\n     if the socket is created by the kernel.\n\n (2) Store the kern parameter passed to sk_alloc() in a variable in the\n     sock struct (sk_kern_sock).  This informs sock_lock_init(),\n     sock_init_data() and sk_clone_lock() as to the lock keys to be used.\n\n     Note that the child created by sk_clone_lock() inherits the parent\u0027s\n     kern setting.\n\n (3) Add a \u0027kern\u0027 parameter to -\u003eaccept() that is analogous to the one\n     passed in to -\u003ecreate() that distinguishes whether kernel_accept() or\n     sys_accept4() was the caller and can be passed to sk_alloc().\n\n     Note that a lot of accept functions merely dequeue an already\n     allocated socket.  I haven\u0027t touched these as the new socket already\n     exists before we get the parameter.\n\n     Note also that there are a couple of places where I\u0027ve made the accepted\n     socket unconditionally kernel-based:\n\n\tirda_accept()\n\trds_rcp_accept_one()\n\ttcp_accept_from_sock()\n\n     because they follow a sock_create_kern() and accept off of that.\n\nWhilst creating this, I noticed that lustre and ocfs don\u0027t create sockets\nthrough sock_create_kern() and thus they aren\u0027t marked as for-kernel,\nthough they appear to be internal.  I wonder if these should do that so\nthat they use the new set of lock keys.\n\nSigned-off-by: David Howells \u003cdhowells@redhat.com\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "f5e18c2a48527bb3f5bbdc5202b37577689710b3",
      "old_mode": 33188,
      "old_path": "crypto/af_alg.c",
      "new_id": "690deca17c35287c00171466f7b06e53262b0601",
      "new_mode": 33188,
      "new_path": "crypto/af_alg.c"
    },
    {
      "type": "modify",
      "old_id": "54fc90e8339ce83edab95908adb16ddc1e9d7d32",
      "old_mode": 33188,
      "old_path": "crypto/algif_hash.c",
      "new_id": "5e92bd275ef38e8dfe47d9ca50a0e5ced51b2d0e",
      "new_mode": 33188,
      "new_path": "crypto/algif_hash.c"
    },
    {
      "type": "modify",
      "old_id": "b7b87ecefcdfc712b74a79298594cdaa94ab68bc",
      "old_mode": 33188,
      "old_path": "drivers/staging/lustre/lnet/lnet/lib-socket.c",
      "new_id": "9fca8d225ee092e92e1fb71a7a6faff5ee1a831c",
      "new_mode": 33188,
      "new_path": "drivers/staging/lustre/lnet/lnet/lib-socket.c"
    },
    {
      "type": "modify",
      "old_id": "7d398d300e972c3604727ac8d6d4fbf7302318a6",
      "old_mode": 33188,
      "old_path": "fs/dlm/lowcomms.c",
      "new_id": "9382db998ec9549319f47b55ccd561abf1169874",
      "new_mode": 33188,
      "new_path": "fs/dlm/lowcomms.c"
    },
    {
      "type": "modify",
      "old_id": "4348027384f5edf06a66dd417214b9bbd3dd05cd",
      "old_mode": 33188,
      "old_path": "fs/ocfs2/cluster/tcp.c",
      "new_id": "d0ab7e56d0b41a7a97f3640eb0ab4801f747dffc",
      "new_mode": 33188,
      "new_path": "fs/ocfs2/cluster/tcp.c"
    },
    {
      "type": "modify",
      "old_id": "a2bfd7843f18f6e79d8bc7e5743b031345153053",
      "old_mode": 33188,
      "old_path": "include/crypto/if_alg.h",
      "new_id": "e2b9c6fe271496e45dca5abb94d814dd8a9c3c04",
      "new_mode": 33188,
      "new_path": "include/crypto/if_alg.h"
    },
    {
      "type": "modify",
      "old_id": "cd0c8bd0a1dec0d2047509177ee8d33de1f185d4",
      "old_mode": 33188,
      "old_path": "include/linux/net.h",
      "new_id": "0620f5e18c96b706b70fb71005b29008a11fffb1",
      "new_mode": 33188,
      "new_path": "include/linux/net.h"
    },
    {
      "type": "modify",
      "old_id": "b7952d55b9c00039a9eca46544997c10722682b6",
      "old_mode": 33188,
      "old_path": "include/net/inet_common.h",
      "new_id": "f39ae697347f6590459ee4178de84160b43841e2",
      "new_mode": 33188,
      "new_path": "include/net/inet_common.h"
    },
    {
      "type": "modify",
      "old_id": "826f198374f809a4b7ca23ada4a46433b972ef35",
      "old_mode": 33188,
      "old_path": "include/net/inet_connection_sock.h",
      "new_id": "c7a577976bec0887218a969bc8197dc1c8eb13f0",
      "new_mode": 33188,
      "new_path": "include/net/inet_connection_sock.h"
    },
    {
      "type": "modify",
      "old_id": "a244db5e5ff7fa65bcf0a4124cbbe5f4682e6d9d",
      "old_mode": 33188,
      "old_path": "include/net/sctp/structs.h",
      "new_id": "07a0b128625a4e24f9aa83019eff6eb17308eda3",
      "new_mode": 33188,
      "new_path": "include/net/sctp/structs.h"
    },
    {
      "type": "modify",
      "old_id": "5e5997654db6454f82179cc35c4bc22e89d0c06f",
      "old_mode": 33188,
      "old_path": "include/net/sock.h",
      "new_id": "03252d53975de7ad0da66d35802738830b0e3367",
      "new_mode": 33188,
      "new_path": "include/net/sock.h"
    },
    {
      "type": "modify",
      "old_id": "db9794ec61d88efe16419a6c4534daf7c8770bc1",
      "old_mode": 33188,
      "old_path": "net/atm/svc.c",
      "new_id": "5589de7086af4eca7634e786918600a81cf6b09c",
      "new_mode": 33188,
      "new_path": "net/atm/svc.c"
    },
    {
      "type": "modify",
      "old_id": "a8e42cedf1dbc7e11a5803a3dbe857e1e4cd54e1",
      "old_mode": 33188,
      "old_path": "net/ax25/af_ax25.c",
      "new_id": "b7c486752b3acf64b821ccb8b0e1a9bc25c945da",
      "new_mode": 33188,
      "new_path": "net/ax25/af_ax25.c"
    },
    {
      "type": "modify",
      "old_id": "f307b145ea5405482434a9c37cafeb6d3f32dee4",
      "old_mode": 33188,
      "old_path": "net/bluetooth/l2cap_sock.c",
      "new_id": "507b80d59dec4fd3b0eb3c50ed1cd95a78adfcb7",
      "new_mode": 33188,
      "new_path": "net/bluetooth/l2cap_sock.c"
    },
    {
      "type": "modify",
      "old_id": "aa1a814ceddca77f790f0c570e9c89ef08ebe186",
      "old_mode": 33188,
      "old_path": "net/bluetooth/rfcomm/sock.c",
      "new_id": "ac3c650cb234f9985ddf0b54924db9000c4586c3",
      "new_mode": 33188,
      "new_path": "net/bluetooth/rfcomm/sock.c"
    },
    {
      "type": "modify",
      "old_id": "e4e9a2da1e7e7a0e4b9764fe6de8819b9908ef3f",
      "old_mode": 33188,
      "old_path": "net/bluetooth/sco.c",
      "new_id": "728e0c8dc8e74ccb134b8ed1d493ea8ee49bf49b",
      "new_mode": 33188,
      "new_path": "net/bluetooth/sco.c"
    },
    {
      "type": "modify",
      "old_id": "f6fd79f33097f3fa279fcb0b610286259af9b111",
      "old_mode": 33188,
      "old_path": "net/core/sock.c",
      "new_id": "a96d5f7a5734a52dfd6a2df8490c7bd7f5f6599a",
      "new_mode": 33188,
      "new_path": "net/core/sock.c"
    },
    {
      "type": "modify",
      "old_id": "e6e79eda97636df6f6e0e6e914405381c3efeaaa",
      "old_mode": 33188,
      "old_path": "net/decnet/af_decnet.c",
      "new_id": "7de5b40a5d0d1245ad995877f779e0d87d1cf398",
      "new_mode": 33188,
      "new_path": "net/decnet/af_decnet.c"
    },
    {
      "type": "modify",
      "old_id": "5091f46826fadb456286b4acc293f3f4c1348f00",
      "old_mode": 33188,
      "old_path": "net/ipv4/af_inet.c",
      "new_id": "6b1fc6e4278ef4f1cba58412977918af31d73e62",
      "new_mode": 33188,
      "new_path": "net/ipv4/af_inet.c"
    },
    {
      "type": "modify",
      "old_id": "b4d5980ade3b584c444d0f0c6523f03a2f71f884",
      "old_mode": 33188,
      "old_path": "net/ipv4/inet_connection_sock.c",
      "new_id": "5e313c1ac94fc88eca5fe3a0e9e46e551e955ff0",
      "new_mode": 33188,
      "new_path": "net/ipv4/inet_connection_sock.c"
    },
    {
      "type": "modify",
      "old_id": "81adc29a448dc5be56b96ddd5c42321417371d37",
      "old_mode": 33188,
      "old_path": "net/irda/af_irda.c",
      "new_id": "8d77ad5cadaff3aa1feb18f168e779c5a6e7f917",
      "new_mode": 33188,
      "new_path": "net/irda/af_irda.c"
    },
    {
      "type": "modify",
      "old_id": "89bbde1081ce5eb56c0c6a1c7c18b030f3de1198",
      "old_mode": 33188,
      "old_path": "net/iucv/af_iucv.c",
      "new_id": "84de7b6326dcdf7fcf0d8cb73f738d9c21c2f9fe",
      "new_mode": 33188,
      "new_path": "net/iucv/af_iucv.c"
    },
    {
      "type": "modify",
      "old_id": "06186d608a274eb46cd768610c67e8a5a8e84c15",
      "old_mode": 33188,
      "old_path": "net/llc/af_llc.c",
      "new_id": "cb4fff785cbf5aaad520442dc243ae62dc5750ea",
      "new_mode": 33188,
      "new_path": "net/llc/af_llc.c"
    },
    {
      "type": "modify",
      "old_id": "4bbf4526b88566d7c3f14e602f279b7e2570113c",
      "old_mode": 33188,
      "old_path": "net/netrom/af_netrom.c",
      "new_id": "ebf16f7f90892dd3029e643835859459baec4507",
      "new_mode": 33188,
      "new_path": "net/netrom/af_netrom.c"
    },
    {
      "type": "modify",
      "old_id": "879885b31cce5ff2461c3a1524612527b9383bbd",
      "old_mode": 33188,
      "old_path": "net/nfc/llcp_sock.c",
      "new_id": "2ffb18e73df6c03072fffeb68b660fb2f884eb45",
      "new_mode": 33188,
      "new_path": "net/nfc/llcp_sock.c"
    },
    {
      "type": "modify",
      "old_id": "222bedcd95754c80644748daba365dc00b10fd8c",
      "old_mode": 33188,
      "old_path": "net/phonet/pep.c",
      "new_id": "e81537991ddf0d67e6eca19fc9eb6f442d3c06a4",
      "new_mode": 33188,
      "new_path": "net/phonet/pep.c"
    },
    {
      "type": "modify",
      "old_id": "a6c8da3ee89349989a9f23e095b98293050da73a",
      "old_mode": 33188,
      "old_path": "net/phonet/socket.c",
      "new_id": "64634e3ec2fc78ebb84ad8873f6e446d06844493",
      "new_mode": 33188,
      "new_path": "net/phonet/socket.c"
    },
    {
      "type": "modify",
      "old_id": "2c69a508a693f02ee90c604e935802cce3b7eb97",
      "old_mode": 33188,
      "old_path": "net/rds/tcp_listen.c",
      "new_id": "507678853e6cb3bb769711d22d75f5099228faab",
      "new_mode": 33188,
      "new_path": "net/rds/tcp_listen.c"
    },
    {
      "type": "modify",
      "old_id": "b8a1df2c97853246b2485d9d30caa0e19b61278a",
      "old_mode": 33188,
      "old_path": "net/rose/af_rose.c",
      "new_id": "4a9729257023676565a0ff8c140ef56823b6d374",
      "new_mode": 33188,
      "new_path": "net/rose/af_rose.c"
    },
    {
      "type": "modify",
      "old_id": "063baac5b9fe4048e9d7b41e848a33f0f73c61d4",
      "old_mode": 33188,
      "old_path": "net/sctp/ipv6.c",
      "new_id": "961ee59f696a0b0a8b6c2bade0031a073dff53ad",
      "new_mode": 33188,
      "new_path": "net/sctp/ipv6.c"
    },
    {
      "type": "modify",
      "old_id": "1b6d4574d2b02a2877caba604bb549352a0f0470",
      "old_mode": 33188,
      "old_path": "net/sctp/protocol.c",
      "new_id": "989a900383b57c57590bff37e3aee7426fb0b156",
      "new_mode": 33188,
      "new_path": "net/sctp/protocol.c"
    },
    {
      "type": "modify",
      "old_id": "6f0a9be50f5055fd7efa29bb8b183cc37b23b25f",
      "old_mode": 33188,
      "old_path": "net/sctp/socket.c",
      "new_id": "0f378ea2ae38828d75dc215abdbc258e75cec431",
      "new_mode": 33188,
      "new_path": "net/sctp/socket.c"
    },
    {
      "type": "modify",
      "old_id": "85837ab90e8916e612d5dd0a21ef48c5e2c9e544",
      "old_mode": 33188,
      "old_path": "net/smc/af_smc.c",
      "new_id": "093803786eacf3388dc470a04c02293f60e4102e",
      "new_mode": 33188,
      "new_path": "net/smc/af_smc.c"
    },
    {
      "type": "modify",
      "old_id": "e0757e648c0c45d78fc40e4bd4b2cff751f7ccb7",
      "old_mode": 33188,
      "old_path": "net/socket.c",
      "new_id": "e034fe4164beec7731c68ba2bc6920627741561b",
      "new_mode": 33188,
      "new_path": "net/socket.c"
    },
    {
      "type": "modify",
      "old_id": "43e4045e72bc00cfbc9db6c1bf987a46e272969b",
      "old_mode": 33188,
      "old_path": "net/tipc/socket.c",
      "new_id": "7130e73bd42c21758e88b24b875da4bd97b3c4d2",
      "new_mode": 33188,
      "new_path": "net/tipc/socket.c"
    },
    {
      "type": "modify",
      "old_id": "ee37b390260a62f026f08e3da827ae45666bc2a6",
      "old_mode": 33188,
      "old_path": "net/unix/af_unix.c",
      "new_id": "928691c434087e8ff72b84fc6515539115c0509b",
      "new_mode": 33188,
      "new_path": "net/unix/af_unix.c"
    },
    {
      "type": "modify",
      "old_id": "9192ead6675114128817267926befe23f7cc1111",
      "old_mode": 33188,
      "old_path": "net/vmw_vsock/af_vsock.c",
      "new_id": "9f770f33c10098fd3fcccfd9c739ab9a28a6b6f5",
      "new_mode": 33188,
      "new_path": "net/vmw_vsock/af_vsock.c"
    },
    {
      "type": "modify",
      "old_id": "fd28a49dbe8f0c99bb798acec314c63084fc22c6",
      "old_mode": 33188,
      "old_path": "net/x25/af_x25.c",
      "new_id": "8b911c29860e79f21b0ac8e1d3a80ed373fd537e",
      "new_mode": 33188,
      "new_path": "net/x25/af_x25.c"
    }
  ]
}
