From 157d7ebdbd7479b271e7b1df744b2dfc6b5816e9 Mon Sep 17 00:00:00 2001 From: cinap_lenrek Date: Sun, 12 May 2019 01:20:21 +0200 Subject: [PATCH] devip: do not lock selftab in ipselftabread(), remove unused fields from Ipself the Ipselftab is designed to not require locking on read operation. locking the selftab in ipselftabread() risks deadlock when accessing the user buffer creates a fault. remove unused fields from the Ipself struct. --- sys/src/9/ip/ip.h | 4 ++-- sys/src/9/ip/ipifc.c | 6 +----- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/sys/src/9/ip/ip.h b/sys/src/9/ip/ip.h index 919dd7de6..676c09fc4 100644 --- a/sys/src/9/ip/ip.h +++ b/sys/src/9/ip/ip.h @@ -274,9 +274,9 @@ struct Iplink Ipself *self; Iplifc *lifc; Iplink *selflink; /* next link for this local address */ - Iplink *lifclink; /* next link for this ifc */ - ulong expire; + Iplink *lifclink; /* next link for this lifc */ Iplink *next; /* free list */ + ulong expire; int ref; }; diff --git a/sys/src/9/ip/ipifc.c b/sys/src/9/ip/ipifc.c index 645e4f1e7..45187583b 100644 --- a/sys/src/9/ip/ipifc.c +++ b/sys/src/9/ip/ipifc.c @@ -26,12 +26,10 @@ Medium *media[Maxmedia] = { 0 }; struct Ipself { uchar a[IPaddrlen]; - Ipself *hnext; /* next address in the hash table */ + Ipself *next; /* next address in the hash table */ Iplink *link; /* binding twixt Ipself and Ipifc */ ulong expire; uchar type; /* type of address */ - int ref; - Ipself *next; /* free list */ }; struct Ipselftab @@ -1100,7 +1098,6 @@ ipselftabread(Fs *f, char *cp, ulong offset, int n) m = 0; off = offset; - qlock(f->self); for(i = 0; i < NHASH && m < n; i++){ for(p = f->self->hash[i]; p != nil && m < n; p = p->next){ nifc = 0; @@ -1115,7 +1112,6 @@ ipselftabread(Fs *f, char *cp, ulong offset, int n) } } } - qunlock(f->self); return m; }