diff options
| author | Peter Oskolkov <posk@google.com> | 2018-12-15 14:27:23 -0800 | 
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2018-12-16 12:14:29 -0800 | 
| commit | ec49d83f245453515a9b6e88324e27bbcb69fbae (patch) | |
| tree | cdad76ac56855e3d4ab4736882c02a34813b2f21 /net/dccp | |
| parent | c151acc6e9ffa08972aa20d8bc07a66081922c1e (diff) | |
| download | linux-ec49d83f245453515a9b6e88324e27bbcb69fbae.tar.bz2 | |
net: dccp: initialize (addr,port) listening hashtable
Commit d9fbc7f6431f "net: tcp: prefer listeners bound to an address"
removes port-only listener lookups. This caused segfaults in DCCP
lookups because DCCP did not initialize the (addr,port) hashtable.
This patch adds said initialization.
The only non-trivial issue here is the size of the new hashtable.
It seemed reasonable to make it match the size of the port-only
hashtable (= INET_LHTABLE_SIZE) that was used previously. Other
parameters to inet_hashinfo2_init() match those used in TCP.
Tested: syzcaller issues fixed; the second patch in the patchset
        tests that DCCP lookups work correctly.
Fixes: d9fbc7f6431f "net: tcp: prefer listeners bound to an address"
Reported-by: syzcaller <syzkaller@googlegroups.com>
Signed-off-by: Peter Oskolkov <posk@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/dccp')
| -rw-r--r-- | net/dccp/proto.c | 3 | 
1 files changed, 3 insertions, 0 deletions
diff --git a/net/dccp/proto.c b/net/dccp/proto.c index 658cd32bb7b3..be0b223aa862 100644 --- a/net/dccp/proto.c +++ b/net/dccp/proto.c @@ -1141,6 +1141,9 @@ static int __init dccp_init(void)  		goto out_fail;  	rc = -ENOBUFS;  	inet_hashinfo_init(&dccp_hashinfo); +	inet_hashinfo2_init(&dccp_hashinfo, "dccp_listen_portaddr_hash", +			    INET_LHTABLE_SIZE, 21,  /* one slot per 2 MB*/ +			    0, 64 * 1024);  	dccp_hashinfo.bind_bucket_cachep =  		kmem_cache_create("dccp_bind_bucket",  				  sizeof(struct inet_bind_bucket), 0,  |