* [PATCH v2 net 00/12] sysctl: Fix data-races around ipv4_table.
@ 2022-07-06 23:39 Kuniyuki Iwashima
2022-07-06 23:39 ` [PATCH v2 net 01/12] sysctl: Fix data races in proc_dointvec() Kuniyuki Iwashima
` (12 more replies)
0 siblings, 13 replies; 19+ messages in thread
From: Kuniyuki Iwashima @ 2022-07-06 23:39 UTC (permalink / raw)
To: David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
Luis Chamberlain, Kees Cook, Iurii Zaikin
Cc: Kuniyuki Iwashima, Kuniyuki Iwashima, netdev, linux-kernel
A sysctl variable is accessed concurrently, and there is always a chance
of data-race. So, all readers and writers need some basic protection to
avoid load/store-tearing.
The first half of this series changes some proc handlers used in ipv4_table
to use READ_ONCE() and WRITE_ONCE() internally to fix data-races on the
sysctl side. Then, the second half adds READ_ONCE() to the other readers
of ipv4_table.
Changes:
v2:
* Drop some changes that makes backporting difficult
* First cleanup patch
* Lockless helpers and .proc_handler changes
* Drop the tracing part for .sysctl_mem
* Steve already posted a fix
* Drop int-to-bool change for cipso
* Should be posted to net-next later
* Drop proc_dobool() change
* Can be included in another series
v1: https://lore.kernel.org/netdev/20220706052130.16368-1-kuniyu@amazon.com/
Kuniyuki Iwashima (12):
sysctl: Fix data races in proc_dointvec().
sysctl: Fix data races in proc_douintvec().
sysctl: Fix data races in proc_dointvec_minmax().
sysctl: Fix data races in proc_douintvec_minmax().
sysctl: Fix data races in proc_doulongvec_minmax().
sysctl: Fix data races in proc_dointvec_jiffies().
tcp: Fix a data-race around sysctl_tcp_max_orphans.
inetpeer: Fix data-races around sysctl.
net: Fix data-races around sysctl_mem.
cipso: Fix data-races around sysctl.
icmp: Fix data-races around sysctl.
ipv4: Fix a data-race around sysctl_fib_sync_mem.
Documentation/networking/ip-sysctl.rst | 2 +-
include/net/sock.h | 2 +-
kernel/sysctl.c | 25 ++++++++++++++-----------
net/ipv4/cipso_ipv4.c | 12 +++++++-----
net/ipv4/fib_trie.c | 2 +-
net/ipv4/icmp.c | 5 +++--
net/ipv4/inetpeer.c | 12 ++++++++----
net/ipv4/tcp.c | 3 ++-
8 files changed, 37 insertions(+), 26 deletions(-)
--
2.30.2
^ permalink raw reply [flat|nested] 19+ messages in thread
* [PATCH v2 net 01/12] sysctl: Fix data races in proc_dointvec().
2022-07-06 23:39 [PATCH v2 net 00/12] sysctl: Fix data-races around ipv4_table Kuniyuki Iwashima
@ 2022-07-06 23:39 ` Kuniyuki Iwashima
2022-07-06 23:39 ` [PATCH v2 net 02/12] sysctl: Fix data races in proc_douintvec() Kuniyuki Iwashima
` (11 subsequent siblings)
12 siblings, 0 replies; 19+ messages in thread
From: Kuniyuki Iwashima @ 2022-07-06 23:39 UTC (permalink / raw)
To: David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
Luis Chamberlain, Kees Cook, Iurii Zaikin
Cc: Kuniyuki Iwashima, Kuniyuki Iwashima, netdev, linux-kernel
A sysctl variable is accessed concurrently, and there is always a chance
of data-race. So, all readers and writers need some basic protection to
avoid load/store-tearing.
This patch changes proc_dointvec() to use READ_ONCE() and WRITE_ONCE()
internally to fix data-races on the sysctl side. For now, proc_dointvec()
itself is tolerant to a data-race, but we still need to add annotations on
the other subsystem's side.
Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
Signed-off-by: Kuniyuki Iwashima <kuniyu@amazon.com>
---
kernel/sysctl.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/kernel/sysctl.c b/kernel/sysctl.c
index e52b6e372c60..c8a05655ae60 100644
--- a/kernel/sysctl.c
+++ b/kernel/sysctl.c
@@ -446,14 +446,14 @@ static int do_proc_dointvec_conv(bool *negp, unsigned long *lvalp,
if (*negp) {
if (*lvalp > (unsigned long) INT_MAX + 1)
return -EINVAL;
- *valp = -*lvalp;
+ WRITE_ONCE(*valp, -*lvalp);
} else {
if (*lvalp > (unsigned long) INT_MAX)
return -EINVAL;
- *valp = *lvalp;
+ WRITE_ONCE(*valp, *lvalp);
}
} else {
- int val = *valp;
+ int val = READ_ONCE(*valp);
if (val < 0) {
*negp = true;
*lvalp = -(unsigned long)val;
--
2.30.2
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [PATCH v2 net 02/12] sysctl: Fix data races in proc_douintvec().
2022-07-06 23:39 [PATCH v2 net 00/12] sysctl: Fix data-races around ipv4_table Kuniyuki Iwashima
2022-07-06 23:39 ` [PATCH v2 net 01/12] sysctl: Fix data races in proc_dointvec() Kuniyuki Iwashima
@ 2022-07-06 23:39 ` Kuniyuki Iwashima
2022-07-06 23:39 ` [PATCH v2 net 03/12] sysctl: Fix data races in proc_dointvec_minmax() Kuniyuki Iwashima
` (10 subsequent siblings)
12 siblings, 0 replies; 19+ messages in thread
From: Kuniyuki Iwashima @ 2022-07-06 23:39 UTC (permalink / raw)
To: David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
Luis Chamberlain, Kees Cook, Iurii Zaikin
Cc: Kuniyuki Iwashima, Kuniyuki Iwashima, netdev, linux-kernel,
Subash Abhinov Kasiviswanathan
A sysctl variable is accessed concurrently, and there is always a chance
of data-race. So, all readers and writers need some basic protection to
avoid load/store-tearing.
This patch changes proc_douintvec() to use READ_ONCE() and WRITE_ONCE()
internally to fix data-races on the sysctl side. For now, proc_douintvec()
itself is tolerant to a data-race, but we still need to add annotations on
the other subsystem's side.
Fixes: e7d316a02f68 ("sysctl: handle error writing UINT_MAX to u32 fields")
Signed-off-by: Kuniyuki Iwashima <kuniyu@amazon.com>
---
CC: Subash Abhinov Kasiviswanathan <quic_subashab@quicinc.com>
---
kernel/sysctl.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/kernel/sysctl.c b/kernel/sysctl.c
index c8a05655ae60..2ab8c2a37e8f 100644
--- a/kernel/sysctl.c
+++ b/kernel/sysctl.c
@@ -472,9 +472,9 @@ static int do_proc_douintvec_conv(unsigned long *lvalp,
if (write) {
if (*lvalp > UINT_MAX)
return -EINVAL;
- *valp = *lvalp;
+ WRITE_ONCE(*valp, *lvalp);
} else {
- unsigned int val = *valp;
+ unsigned int val = READ_ONCE(*valp);
*lvalp = (unsigned long)val;
}
return 0;
--
2.30.2
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [PATCH v2 net 03/12] sysctl: Fix data races in proc_dointvec_minmax().
2022-07-06 23:39 [PATCH v2 net 00/12] sysctl: Fix data-races around ipv4_table Kuniyuki Iwashima
2022-07-06 23:39 ` [PATCH v2 net 01/12] sysctl: Fix data races in proc_dointvec() Kuniyuki Iwashima
2022-07-06 23:39 ` [PATCH v2 net 02/12] sysctl: Fix data races in proc_douintvec() Kuniyuki Iwashima
@ 2022-07-06 23:39 ` Kuniyuki Iwashima
2022-07-06 23:39 ` [PATCH v2 net 04/12] sysctl: Fix data races in proc_douintvec_minmax() Kuniyuki Iwashima
` (9 subsequent siblings)
12 siblings, 0 replies; 19+ messages in thread
From: Kuniyuki Iwashima @ 2022-07-06 23:39 UTC (permalink / raw)
To: David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
Luis Chamberlain, Kees Cook, Iurii Zaikin
Cc: Kuniyuki Iwashima, Kuniyuki Iwashima, netdev, linux-kernel
A sysctl variable is accessed concurrently, and there is always a chance
of data-race. So, all readers and writers need some basic protection to
avoid load/store-tearing.
This patch changes proc_dointvec_minmax() to use READ_ONCE() and
WRITE_ONCE() internally to fix data-races on the sysctl side. For now,
proc_dointvec_minmax() itself is tolerant to a data-race, but we still
need to add annotations on the other subsystem's side.
Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
Signed-off-by: Kuniyuki Iwashima <kuniyu@amazon.com>
---
kernel/sysctl.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/kernel/sysctl.c b/kernel/sysctl.c
index 2ab8c2a37e8f..4d87832367f2 100644
--- a/kernel/sysctl.c
+++ b/kernel/sysctl.c
@@ -857,7 +857,7 @@ static int do_proc_dointvec_minmax_conv(bool *negp, unsigned long *lvalp,
if ((param->min && *param->min > tmp) ||
(param->max && *param->max < tmp))
return -EINVAL;
- *valp = tmp;
+ WRITE_ONCE(*valp, tmp);
}
return 0;
--
2.30.2
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [PATCH v2 net 04/12] sysctl: Fix data races in proc_douintvec_minmax().
2022-07-06 23:39 [PATCH v2 net 00/12] sysctl: Fix data-races around ipv4_table Kuniyuki Iwashima
` (2 preceding siblings ...)
2022-07-06 23:39 ` [PATCH v2 net 03/12] sysctl: Fix data races in proc_dointvec_minmax() Kuniyuki Iwashima
@ 2022-07-06 23:39 ` Kuniyuki Iwashima
2022-07-06 23:39 ` [PATCH v2 net 05/12] sysctl: Fix data races in proc_doulongvec_minmax() Kuniyuki Iwashima
` (8 subsequent siblings)
12 siblings, 0 replies; 19+ messages in thread
From: Kuniyuki Iwashima @ 2022-07-06 23:39 UTC (permalink / raw)
To: David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
Luis Chamberlain, Kees Cook, Iurii Zaikin
Cc: Kuniyuki Iwashima, Kuniyuki Iwashima, netdev, linux-kernel
A sysctl variable is accessed concurrently, and there is always a chance
of data-race. So, all readers and writers need some basic protection to
avoid load/store-tearing.
This patch changes proc_douintvec_minmax() to use READ_ONCE() and
WRITE_ONCE() internally to fix data-races on the sysctl side. For now,
proc_douintvec_minmax() itself is tolerant to a data-race, but we still
need to add annotations on the other subsystem's side.
Fixes: 61d9b56a8920 ("sysctl: add unsigned int range support")
Signed-off-by: Kuniyuki Iwashima <kuniyu@amazon.com>
---
kernel/sysctl.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/kernel/sysctl.c b/kernel/sysctl.c
index 4d87832367f2..379721a03d41 100644
--- a/kernel/sysctl.c
+++ b/kernel/sysctl.c
@@ -923,7 +923,7 @@ static int do_proc_douintvec_minmax_conv(unsigned long *lvalp,
(param->max && *param->max < tmp))
return -ERANGE;
- *valp = tmp;
+ WRITE_ONCE(*valp, tmp);
}
return 0;
--
2.30.2
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [PATCH v2 net 05/12] sysctl: Fix data races in proc_doulongvec_minmax().
2022-07-06 23:39 [PATCH v2 net 00/12] sysctl: Fix data-races around ipv4_table Kuniyuki Iwashima
` (3 preceding siblings ...)
2022-07-06 23:39 ` [PATCH v2 net 04/12] sysctl: Fix data races in proc_douintvec_minmax() Kuniyuki Iwashima
@ 2022-07-06 23:39 ` Kuniyuki Iwashima
2022-07-06 23:39 ` [PATCH v2 net 06/12] sysctl: Fix data races in proc_dointvec_jiffies() Kuniyuki Iwashima
` (7 subsequent siblings)
12 siblings, 0 replies; 19+ messages in thread
From: Kuniyuki Iwashima @ 2022-07-06 23:39 UTC (permalink / raw)
To: David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
Luis Chamberlain, Kees Cook, Iurii Zaikin
Cc: Kuniyuki Iwashima, Kuniyuki Iwashima, netdev, linux-kernel
A sysctl variable is accessed concurrently, and there is always a chance
of data-race. So, all readers and writers need some basic protection to
avoid load/store-tearing.
This patch changes proc_doulongvec_minmax() to use READ_ONCE() and
WRITE_ONCE() internally to fix data-races on the sysctl side. For now,
proc_doulongvec_minmax() itself is tolerant to a data-race, but we still
need to add annotations on the other subsystem's side.
Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
Signed-off-by: Kuniyuki Iwashima <kuniyu@amazon.com>
---
kernel/sysctl.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/kernel/sysctl.c b/kernel/sysctl.c
index 379721a03d41..8c55ba01f41b 100644
--- a/kernel/sysctl.c
+++ b/kernel/sysctl.c
@@ -1090,9 +1090,9 @@ static int __do_proc_doulongvec_minmax(void *data, struct ctl_table *table,
err = -EINVAL;
break;
}
- *i = val;
+ WRITE_ONCE(*i, val);
} else {
- val = convdiv * (*i) / convmul;
+ val = convdiv * READ_ONCE(*i) / convmul;
if (!first)
proc_put_char(&buffer, &left, '\t');
proc_put_long(&buffer, &left, val, false);
--
2.30.2
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [PATCH v2 net 06/12] sysctl: Fix data races in proc_dointvec_jiffies().
2022-07-06 23:39 [PATCH v2 net 00/12] sysctl: Fix data-races around ipv4_table Kuniyuki Iwashima
` (4 preceding siblings ...)
2022-07-06 23:39 ` [PATCH v2 net 05/12] sysctl: Fix data races in proc_doulongvec_minmax() Kuniyuki Iwashima
@ 2022-07-06 23:39 ` Kuniyuki Iwashima
2022-07-06 23:39 ` [PATCH v2 net 07/12] tcp: Fix a data-race around sysctl_tcp_max_orphans Kuniyuki Iwashima
` (6 subsequent siblings)
12 siblings, 0 replies; 19+ messages in thread
From: Kuniyuki Iwashima @ 2022-07-06 23:39 UTC (permalink / raw)
To: David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
Luis Chamberlain, Kees Cook, Iurii Zaikin
Cc: Kuniyuki Iwashima, Kuniyuki Iwashima, netdev, linux-kernel
A sysctl variable is accessed concurrently, and there is always a chance
of data-race. So, all readers and writers need some basic protection to
avoid load/store-tearing.
This patch changes proc_dointvec_jiffies() to use READ_ONCE() and
WRITE_ONCE() internally to fix data-races on the sysctl side. For now,
proc_dointvec_jiffies() itself is tolerant to a data-race, but we still
need to add annotations on the other subsystem's side.
Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
Signed-off-by: Kuniyuki Iwashima <kuniyu@amazon.com>
---
kernel/sysctl.c | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/kernel/sysctl.c b/kernel/sysctl.c
index 8c55ba01f41b..bf9383d17e1b 100644
--- a/kernel/sysctl.c
+++ b/kernel/sysctl.c
@@ -1173,9 +1173,12 @@ static int do_proc_dointvec_jiffies_conv(bool *negp, unsigned long *lvalp,
if (write) {
if (*lvalp > INT_MAX / HZ)
return 1;
- *valp = *negp ? -(*lvalp*HZ) : (*lvalp*HZ);
+ if (*negp)
+ WRITE_ONCE(*valp, -*lvalp * HZ);
+ else
+ WRITE_ONCE(*valp, *lvalp * HZ);
} else {
- int val = *valp;
+ int val = READ_ONCE(*valp);
unsigned long lval;
if (val < 0) {
*negp = true;
--
2.30.2
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [PATCH v2 net 07/12] tcp: Fix a data-race around sysctl_tcp_max_orphans.
2022-07-06 23:39 [PATCH v2 net 00/12] sysctl: Fix data-races around ipv4_table Kuniyuki Iwashima
` (5 preceding siblings ...)
2022-07-06 23:39 ` [PATCH v2 net 06/12] sysctl: Fix data races in proc_dointvec_jiffies() Kuniyuki Iwashima
@ 2022-07-06 23:39 ` Kuniyuki Iwashima
2022-07-06 23:39 ` [PATCH v2 net 08/12] inetpeer: Fix data-races around sysctl Kuniyuki Iwashima
` (5 subsequent siblings)
12 siblings, 0 replies; 19+ messages in thread
From: Kuniyuki Iwashima @ 2022-07-06 23:39 UTC (permalink / raw)
To: David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
Luis Chamberlain, Kees Cook, Iurii Zaikin
Cc: Kuniyuki Iwashima, Kuniyuki Iwashima, netdev, linux-kernel
While reading sysctl_tcp_max_orphans, it can be changed concurrently.
So, we need to add READ_ONCE() to avoid a data-race.
Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
Signed-off-by: Kuniyuki Iwashima <kuniyu@amazon.com>
---
net/ipv4/tcp.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c
index 028513d3e2a2..2222dfdde316 100644
--- a/net/ipv4/tcp.c
+++ b/net/ipv4/tcp.c
@@ -2715,7 +2715,8 @@ static void tcp_orphan_update(struct timer_list *unused)
static bool tcp_too_many_orphans(int shift)
{
- return READ_ONCE(tcp_orphan_cache) << shift > sysctl_tcp_max_orphans;
+ return READ_ONCE(tcp_orphan_cache) << shift >
+ READ_ONCE(sysctl_tcp_max_orphans);
}
bool tcp_check_oom(struct sock *sk, int shift)
--
2.30.2
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [PATCH v2 net 08/12] inetpeer: Fix data-races around sysctl.
2022-07-06 23:39 [PATCH v2 net 00/12] sysctl: Fix data-races around ipv4_table Kuniyuki Iwashima
` (6 preceding siblings ...)
2022-07-06 23:39 ` [PATCH v2 net 07/12] tcp: Fix a data-race around sysctl_tcp_max_orphans Kuniyuki Iwashima
@ 2022-07-06 23:39 ` Kuniyuki Iwashima
2022-07-06 23:40 ` [PATCH v2 net 09/12] net: Fix data-races around sysctl_mem Kuniyuki Iwashima
` (4 subsequent siblings)
12 siblings, 0 replies; 19+ messages in thread
From: Kuniyuki Iwashima @ 2022-07-06 23:39 UTC (permalink / raw)
To: David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
Luis Chamberlain, Kees Cook, Iurii Zaikin
Cc: Kuniyuki Iwashima, Kuniyuki Iwashima, netdev, linux-kernel
While reading inetpeer sysctl variables, they can be changed
concurrently. So, we need to add READ_ONCE() to avoid data-races.
Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
Signed-off-by: Kuniyuki Iwashima <kuniyu@amazon.com>
---
net/ipv4/inetpeer.c | 12 ++++++++----
1 file changed, 8 insertions(+), 4 deletions(-)
diff --git a/net/ipv4/inetpeer.c b/net/ipv4/inetpeer.c
index da21dfce24d7..e9fed83e9b3c 100644
--- a/net/ipv4/inetpeer.c
+++ b/net/ipv4/inetpeer.c
@@ -141,16 +141,20 @@ static void inet_peer_gc(struct inet_peer_base *base,
struct inet_peer *gc_stack[],
unsigned int gc_cnt)
{
+ int peer_threshold, peer_maxttl, peer_minttl;
struct inet_peer *p;
__u32 delta, ttl;
int i;
- if (base->total >= inet_peer_threshold)
+ peer_threshold = READ_ONCE(inet_peer_threshold);
+ peer_maxttl = READ_ONCE(inet_peer_maxttl);
+ peer_minttl = READ_ONCE(inet_peer_minttl);
+
+ if (base->total >= peer_threshold)
ttl = 0; /* be aggressive */
else
- ttl = inet_peer_maxttl
- - (inet_peer_maxttl - inet_peer_minttl) / HZ *
- base->total / inet_peer_threshold * HZ;
+ ttl = peer_maxttl - (peer_maxttl - peer_minttl) / HZ *
+ base->total / peer_threshold * HZ;
for (i = 0; i < gc_cnt; i++) {
p = gc_stack[i];
--
2.30.2
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [PATCH v2 net 09/12] net: Fix data-races around sysctl_mem.
2022-07-06 23:39 [PATCH v2 net 00/12] sysctl: Fix data-races around ipv4_table Kuniyuki Iwashima
` (7 preceding siblings ...)
2022-07-06 23:39 ` [PATCH v2 net 08/12] inetpeer: Fix data-races around sysctl Kuniyuki Iwashima
@ 2022-07-06 23:40 ` Kuniyuki Iwashima
2022-07-09 9:11 ` Matthieu Baerts
2022-07-06 23:40 ` [PATCH v2 net 10/12] cipso: Fix data-races around sysctl Kuniyuki Iwashima
` (3 subsequent siblings)
12 siblings, 1 reply; 19+ messages in thread
From: Kuniyuki Iwashima @ 2022-07-06 23:40 UTC (permalink / raw)
To: David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
Luis Chamberlain, Kees Cook, Iurii Zaikin
Cc: Kuniyuki Iwashima, Kuniyuki Iwashima, netdev, linux-kernel
While reading .sysctl_mem, it can be changed concurrently.
So, we need to add READ_ONCE() to avoid data-races.
Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
Signed-off-by: Kuniyuki Iwashima <kuniyu@amazon.com>
---
include/net/sock.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/include/net/sock.h b/include/net/sock.h
index 72ca97ccb460..9fa54762e077 100644
--- a/include/net/sock.h
+++ b/include/net/sock.h
@@ -1529,7 +1529,7 @@ void __sk_mem_reclaim(struct sock *sk, int amount);
/* sysctl_mem values are in pages, we convert them in SK_MEM_QUANTUM units */
static inline long sk_prot_mem_limits(const struct sock *sk, int index)
{
- long val = sk->sk_prot->sysctl_mem[index];
+ long val = READ_ONCE(sk->sk_prot->sysctl_mem[index]);
#if PAGE_SIZE > SK_MEM_QUANTUM
val <<= PAGE_SHIFT - SK_MEM_QUANTUM_SHIFT;
--
2.30.2
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [PATCH v2 net 10/12] cipso: Fix data-races around sysctl.
2022-07-06 23:39 [PATCH v2 net 00/12] sysctl: Fix data-races around ipv4_table Kuniyuki Iwashima
` (8 preceding siblings ...)
2022-07-06 23:40 ` [PATCH v2 net 09/12] net: Fix data-races around sysctl_mem Kuniyuki Iwashima
@ 2022-07-06 23:40 ` Kuniyuki Iwashima
2022-07-07 19:15 ` Paul Moore
2022-07-06 23:40 ` [PATCH v2 net 11/12] icmp: " Kuniyuki Iwashima
` (2 subsequent siblings)
12 siblings, 1 reply; 19+ messages in thread
From: Kuniyuki Iwashima @ 2022-07-06 23:40 UTC (permalink / raw)
To: David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
Luis Chamberlain, Kees Cook, Iurii Zaikin
Cc: Kuniyuki Iwashima, Kuniyuki Iwashima, netdev, linux-kernel, Paul Moore
While reading cipso sysctl variables, they can be changed concurrently.
So, we need to add READ_ONCE() to avoid data-races.
Fixes: 446fda4f2682 ("[NetLabel]: CIPSOv4 engine")
Signed-off-by: Kuniyuki Iwashima <kuniyu@amazon.com>
---
CC: Paul Moore <paul@paul-moore.com>
---
Documentation/networking/ip-sysctl.rst | 2 +-
net/ipv4/cipso_ipv4.c | 12 +++++++-----
2 files changed, 8 insertions(+), 6 deletions(-)
diff --git a/Documentation/networking/ip-sysctl.rst b/Documentation/networking/ip-sysctl.rst
index 9f41961d11d5..0e58001f8580 100644
--- a/Documentation/networking/ip-sysctl.rst
+++ b/Documentation/networking/ip-sysctl.rst
@@ -1085,7 +1085,7 @@ cipso_cache_enable - BOOLEAN
cipso_cache_bucket_size - INTEGER
The CIPSO label cache consists of a fixed size hash table with each
hash bucket containing a number of cache entries. This variable limits
- the number of entries in each hash bucket; the larger the value the
+ the number of entries in each hash bucket; the larger the value is, the
more CIPSO label mappings that can be cached. When the number of
entries in a given hash bucket reaches this limit adding new entries
causes the oldest entry in the bucket to be removed to make room.
diff --git a/net/ipv4/cipso_ipv4.c b/net/ipv4/cipso_ipv4.c
index 62d5f99760aa..6cd3b6c559f0 100644
--- a/net/ipv4/cipso_ipv4.c
+++ b/net/ipv4/cipso_ipv4.c
@@ -239,7 +239,7 @@ static int cipso_v4_cache_check(const unsigned char *key,
struct cipso_v4_map_cache_entry *prev_entry = NULL;
u32 hash;
- if (!cipso_v4_cache_enabled)
+ if (!READ_ONCE(cipso_v4_cache_enabled))
return -ENOENT;
hash = cipso_v4_map_cache_hash(key, key_len);
@@ -296,13 +296,14 @@ static int cipso_v4_cache_check(const unsigned char *key,
int cipso_v4_cache_add(const unsigned char *cipso_ptr,
const struct netlbl_lsm_secattr *secattr)
{
+ int bkt_size = READ_ONCE(cipso_v4_cache_bucketsize);
int ret_val = -EPERM;
u32 bkt;
struct cipso_v4_map_cache_entry *entry = NULL;
struct cipso_v4_map_cache_entry *old_entry = NULL;
u32 cipso_ptr_len;
- if (!cipso_v4_cache_enabled || cipso_v4_cache_bucketsize <= 0)
+ if (!READ_ONCE(cipso_v4_cache_enabled) || bkt_size <= 0)
return 0;
cipso_ptr_len = cipso_ptr[1];
@@ -322,7 +323,7 @@ int cipso_v4_cache_add(const unsigned char *cipso_ptr,
bkt = entry->hash & (CIPSO_V4_CACHE_BUCKETS - 1);
spin_lock_bh(&cipso_v4_cache[bkt].lock);
- if (cipso_v4_cache[bkt].size < cipso_v4_cache_bucketsize) {
+ if (cipso_v4_cache[bkt].size < bkt_size) {
list_add(&entry->list, &cipso_v4_cache[bkt].list);
cipso_v4_cache[bkt].size += 1;
} else {
@@ -1199,7 +1200,8 @@ static int cipso_v4_gentag_rbm(const struct cipso_v4_doi *doi_def,
/* This will send packets using the "optimized" format when
* possible as specified in section 3.4.2.6 of the
* CIPSO draft. */
- if (cipso_v4_rbm_optfmt && ret_val > 0 && ret_val <= 10)
+ if (READ_ONCE(cipso_v4_rbm_optfmt) && ret_val > 0 &&
+ ret_val <= 10)
tag_len = 14;
else
tag_len = 4 + ret_val;
@@ -1603,7 +1605,7 @@ int cipso_v4_validate(const struct sk_buff *skb, unsigned char **option)
* all the CIPSO validations here but it doesn't
* really specify _exactly_ what we need to validate
* ... so, just make it a sysctl tunable. */
- if (cipso_v4_rbm_strictvalid) {
+ if (READ_ONCE(cipso_v4_rbm_strictvalid)) {
if (cipso_v4_map_lvl_valid(doi_def,
tag[3]) < 0) {
err_offset = opt_iter + 3;
--
2.30.2
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [PATCH v2 net 11/12] icmp: Fix data-races around sysctl.
2022-07-06 23:39 [PATCH v2 net 00/12] sysctl: Fix data-races around ipv4_table Kuniyuki Iwashima
` (9 preceding siblings ...)
2022-07-06 23:40 ` [PATCH v2 net 10/12] cipso: Fix data-races around sysctl Kuniyuki Iwashima
@ 2022-07-06 23:40 ` Kuniyuki Iwashima
2022-07-06 23:40 ` [PATCH v2 net 12/12] ipv4: Fix a data-race around sysctl_fib_sync_mem Kuniyuki Iwashima
2022-07-08 11:50 ` [PATCH v2 net 00/12] sysctl: Fix data-races around ipv4_table patchwork-bot+netdevbpf
12 siblings, 0 replies; 19+ messages in thread
From: Kuniyuki Iwashima @ 2022-07-06 23:40 UTC (permalink / raw)
To: David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
Luis Chamberlain, Kees Cook, Iurii Zaikin
Cc: Kuniyuki Iwashima, Kuniyuki Iwashima, netdev, linux-kernel
While reading icmp sysctl variables, they can be changed concurrently.
So, we need to add READ_ONCE() to avoid data-races.
Fixes: 4cdf507d5452 ("icmp: add a global rate limitation")
Signed-off-by: Kuniyuki Iwashima <kuniyu@amazon.com>
---
net/ipv4/icmp.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/net/ipv4/icmp.c b/net/ipv4/icmp.c
index efea0e796f06..0f9e61d29f73 100644
--- a/net/ipv4/icmp.c
+++ b/net/ipv4/icmp.c
@@ -253,11 +253,12 @@ bool icmp_global_allow(void)
spin_lock(&icmp_global.lock);
delta = min_t(u32, now - icmp_global.stamp, HZ);
if (delta >= HZ / 50) {
- incr = sysctl_icmp_msgs_per_sec * delta / HZ ;
+ incr = READ_ONCE(sysctl_icmp_msgs_per_sec) * delta / HZ;
if (incr)
WRITE_ONCE(icmp_global.stamp, now);
}
- credit = min_t(u32, icmp_global.credit + incr, sysctl_icmp_msgs_burst);
+ credit = min_t(u32, icmp_global.credit + incr,
+ READ_ONCE(sysctl_icmp_msgs_burst));
if (credit) {
/* We want to use a credit of one in average, but need to randomize
* it for security reasons.
--
2.30.2
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [PATCH v2 net 12/12] ipv4: Fix a data-race around sysctl_fib_sync_mem.
2022-07-06 23:39 [PATCH v2 net 00/12] sysctl: Fix data-races around ipv4_table Kuniyuki Iwashima
` (10 preceding siblings ...)
2022-07-06 23:40 ` [PATCH v2 net 11/12] icmp: " Kuniyuki Iwashima
@ 2022-07-06 23:40 ` Kuniyuki Iwashima
2022-07-08 11:50 ` [PATCH v2 net 00/12] sysctl: Fix data-races around ipv4_table patchwork-bot+netdevbpf
12 siblings, 0 replies; 19+ messages in thread
From: Kuniyuki Iwashima @ 2022-07-06 23:40 UTC (permalink / raw)
To: David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
Luis Chamberlain, Kees Cook, Iurii Zaikin
Cc: Kuniyuki Iwashima, Kuniyuki Iwashima, netdev, linux-kernel, David Ahern
While reading sysctl_fib_sync_mem, it can be changed concurrently.
So, we need to add READ_ONCE() to avoid a data-race.
Fixes: 9ab948a91b2c ("ipv4: Allow amount of dirty memory from fib resizing to be controllable")
Signed-off-by: Kuniyuki Iwashima <kuniyu@amazon.com>
---
CC: David Ahern <dsahern@kernel.org>
---
net/ipv4/fib_trie.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/net/ipv4/fib_trie.c b/net/ipv4/fib_trie.c
index 2734c3af7e24..46e8a5125853 100644
--- a/net/ipv4/fib_trie.c
+++ b/net/ipv4/fib_trie.c
@@ -498,7 +498,7 @@ static void tnode_free(struct key_vector *tn)
tn = container_of(head, struct tnode, rcu)->kv;
}
- if (tnode_free_size >= sysctl_fib_sync_mem) {
+ if (tnode_free_size >= READ_ONCE(sysctl_fib_sync_mem)) {
tnode_free_size = 0;
synchronize_rcu();
}
--
2.30.2
^ permalink raw reply related [flat|nested] 19+ messages in thread
* Re: [PATCH v2 net 10/12] cipso: Fix data-races around sysctl.
2022-07-06 23:40 ` [PATCH v2 net 10/12] cipso: Fix data-races around sysctl Kuniyuki Iwashima
@ 2022-07-07 19:15 ` Paul Moore
2022-07-07 22:15 ` Kuniyuki Iwashima
0 siblings, 1 reply; 19+ messages in thread
From: Paul Moore @ 2022-07-07 19:15 UTC (permalink / raw)
To: Kuniyuki Iwashima
Cc: David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
Luis Chamberlain, Kees Cook, Iurii Zaikin, Kuniyuki Iwashima,
netdev, linux-kernel
On Wed, Jul 6, 2022 at 7:43 PM Kuniyuki Iwashima <kuniyu@amazon.com> wrote:
>
> While reading cipso sysctl variables, they can be changed concurrently.
> So, we need to add READ_ONCE() to avoid data-races.
>
> Fixes: 446fda4f2682 ("[NetLabel]: CIPSOv4 engine")
> Signed-off-by: Kuniyuki Iwashima <kuniyu@amazon.com>
> ---
> CC: Paul Moore <paul@paul-moore.com>
Thanks for the patch, this looks good to me. However, in the future
you should probably drop the extra "---" separator (just leave the one
before the diffstat below) and move my "Cc:" up above "Fixes:".
Acked-by: Paul Moore <paul@paul-moore.com>
> ---
> Documentation/networking/ip-sysctl.rst | 2 +-
> net/ipv4/cipso_ipv4.c | 12 +++++++-----
> 2 files changed, 8 insertions(+), 6 deletions(-)
>
> diff --git a/Documentation/networking/ip-sysctl.rst b/Documentation/networking/ip-sysctl.rst
> index 9f41961d11d5..0e58001f8580 100644
> --- a/Documentation/networking/ip-sysctl.rst
> +++ b/Documentation/networking/ip-sysctl.rst
> @@ -1085,7 +1085,7 @@ cipso_cache_enable - BOOLEAN
> cipso_cache_bucket_size - INTEGER
> The CIPSO label cache consists of a fixed size hash table with each
> hash bucket containing a number of cache entries. This variable limits
> - the number of entries in each hash bucket; the larger the value the
> + the number of entries in each hash bucket; the larger the value is, the
> more CIPSO label mappings that can be cached. When the number of
> entries in a given hash bucket reaches this limit adding new entries
> causes the oldest entry in the bucket to be removed to make room.
> diff --git a/net/ipv4/cipso_ipv4.c b/net/ipv4/cipso_ipv4.c
> index 62d5f99760aa..6cd3b6c559f0 100644
> --- a/net/ipv4/cipso_ipv4.c
> +++ b/net/ipv4/cipso_ipv4.c
> @@ -239,7 +239,7 @@ static int cipso_v4_cache_check(const unsigned char *key,
> struct cipso_v4_map_cache_entry *prev_entry = NULL;
> u32 hash;
>
> - if (!cipso_v4_cache_enabled)
> + if (!READ_ONCE(cipso_v4_cache_enabled))
> return -ENOENT;
>
> hash = cipso_v4_map_cache_hash(key, key_len);
> @@ -296,13 +296,14 @@ static int cipso_v4_cache_check(const unsigned char *key,
> int cipso_v4_cache_add(const unsigned char *cipso_ptr,
> const struct netlbl_lsm_secattr *secattr)
> {
> + int bkt_size = READ_ONCE(cipso_v4_cache_bucketsize);
> int ret_val = -EPERM;
> u32 bkt;
> struct cipso_v4_map_cache_entry *entry = NULL;
> struct cipso_v4_map_cache_entry *old_entry = NULL;
> u32 cipso_ptr_len;
>
> - if (!cipso_v4_cache_enabled || cipso_v4_cache_bucketsize <= 0)
> + if (!READ_ONCE(cipso_v4_cache_enabled) || bkt_size <= 0)
> return 0;
>
> cipso_ptr_len = cipso_ptr[1];
> @@ -322,7 +323,7 @@ int cipso_v4_cache_add(const unsigned char *cipso_ptr,
>
> bkt = entry->hash & (CIPSO_V4_CACHE_BUCKETS - 1);
> spin_lock_bh(&cipso_v4_cache[bkt].lock);
> - if (cipso_v4_cache[bkt].size < cipso_v4_cache_bucketsize) {
> + if (cipso_v4_cache[bkt].size < bkt_size) {
> list_add(&entry->list, &cipso_v4_cache[bkt].list);
> cipso_v4_cache[bkt].size += 1;
> } else {
> @@ -1199,7 +1200,8 @@ static int cipso_v4_gentag_rbm(const struct cipso_v4_doi *doi_def,
> /* This will send packets using the "optimized" format when
> * possible as specified in section 3.4.2.6 of the
> * CIPSO draft. */
> - if (cipso_v4_rbm_optfmt && ret_val > 0 && ret_val <= 10)
> + if (READ_ONCE(cipso_v4_rbm_optfmt) && ret_val > 0 &&
> + ret_val <= 10)
> tag_len = 14;
> else
> tag_len = 4 + ret_val;
> @@ -1603,7 +1605,7 @@ int cipso_v4_validate(const struct sk_buff *skb, unsigned char **option)
> * all the CIPSO validations here but it doesn't
> * really specify _exactly_ what we need to validate
> * ... so, just make it a sysctl tunable. */
> - if (cipso_v4_rbm_strictvalid) {
> + if (READ_ONCE(cipso_v4_rbm_strictvalid)) {
> if (cipso_v4_map_lvl_valid(doi_def,
> tag[3]) < 0) {
> err_offset = opt_iter + 3;
> --
> 2.30.2
--
paul-moore.com
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH v2 net 10/12] cipso: Fix data-races around sysctl.
2022-07-07 19:15 ` Paul Moore
@ 2022-07-07 22:15 ` Kuniyuki Iwashima
2022-07-08 0:24 ` Jakub Kicinski
0 siblings, 1 reply; 19+ messages in thread
From: Kuniyuki Iwashima @ 2022-07-07 22:15 UTC (permalink / raw)
To: paul
Cc: davem, edumazet, keescook, kuba, kuni1840, kuniyu, linux-kernel,
mcgrof, netdev, pabeni, yzaikin
From: Paul Moore <paul@paul-moore.com>
Date: Thu, 7 Jul 2022 15:15:52 -0400
> On Wed, Jul 6, 2022 at 7:43 PM Kuniyuki Iwashima <kuniyu@amazon.com> wrote:
> >
> > While reading cipso sysctl variables, they can be changed concurrently.
> > So, we need to add READ_ONCE() to avoid data-races.
> >
> > Fixes: 446fda4f2682 ("[NetLabel]: CIPSOv4 engine")
> > Signed-off-by: Kuniyuki Iwashima <kuniyu@amazon.com>
> > ---
> > CC: Paul Moore <paul@paul-moore.com>
>
> Thanks for the patch, this looks good to me. However, in the future
> you should probably drop the extra "---" separator (just leave the one
> before the diffstat below) and move my "Cc:" up above "Fixes:".
>
> Acked-by: Paul Moore <paul@paul-moore.com>
I was wondering if both CC and Acked-by should stay in each commit, but
will do so in the next time.
Thank you for taking a look!
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH v2 net 10/12] cipso: Fix data-races around sysctl.
2022-07-07 22:15 ` Kuniyuki Iwashima
@ 2022-07-08 0:24 ` Jakub Kicinski
2022-07-08 0:44 ` Kuniyuki Iwashima
0 siblings, 1 reply; 19+ messages in thread
From: Jakub Kicinski @ 2022-07-08 0:24 UTC (permalink / raw)
To: Kuniyuki Iwashima
Cc: paul, davem, edumazet, keescook, kuni1840, linux-kernel, mcgrof,
netdev, pabeni, yzaikin
On Thu, 7 Jul 2022 15:15:37 -0700 Kuniyuki Iwashima wrote:
> I was wondering if both CC and Acked-by should stay in each commit, but
> will do so in the next time.
For Paul only, don't take that as general advice.
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH v2 net 10/12] cipso: Fix data-races around sysctl.
2022-07-08 0:24 ` Jakub Kicinski
@ 2022-07-08 0:44 ` Kuniyuki Iwashima
0 siblings, 0 replies; 19+ messages in thread
From: Kuniyuki Iwashima @ 2022-07-08 0:44 UTC (permalink / raw)
To: kuba
Cc: davem, edumazet, keescook, kuni1840, kuniyu, linux-kernel,
mcgrof, netdev, pabeni, paul, yzaikin
From: Jakub Kicinski <kuba@kernel.org>
Date: Thu, 7 Jul 2022 17:24:24 -0700
> On Thu, 7 Jul 2022 15:15:37 -0700 Kuniyuki Iwashima wrote:
> > I was wondering if both CC and Acked-by should stay in each commit, but
> > will do so in the next time.
>
> For Paul only, don't take that as general advice.
...got it, thanks :)
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH v2 net 00/12] sysctl: Fix data-races around ipv4_table.
2022-07-06 23:39 [PATCH v2 net 00/12] sysctl: Fix data-races around ipv4_table Kuniyuki Iwashima
` (11 preceding siblings ...)
2022-07-06 23:40 ` [PATCH v2 net 12/12] ipv4: Fix a data-race around sysctl_fib_sync_mem Kuniyuki Iwashima
@ 2022-07-08 11:50 ` patchwork-bot+netdevbpf
12 siblings, 0 replies; 19+ messages in thread
From: patchwork-bot+netdevbpf @ 2022-07-08 11:50 UTC (permalink / raw)
To: Kuniyuki Iwashima
Cc: davem, edumazet, kuba, pabeni, mcgrof, keescook, yzaikin,
kuni1840, netdev, linux-kernel
Hello:
This series was applied to netdev/net.git (master)
by David S. Miller <davem@davemloft.net>:
On Wed, 6 Jul 2022 16:39:51 -0700 you wrote:
> A sysctl variable is accessed concurrently, and there is always a chance
> of data-race. So, all readers and writers need some basic protection to
> avoid load/store-tearing.
>
> The first half of this series changes some proc handlers used in ipv4_table
> to use READ_ONCE() and WRITE_ONCE() internally to fix data-races on the
> sysctl side. Then, the second half adds READ_ONCE() to the other readers
> of ipv4_table.
>
> [...]
Here is the summary with links:
- [v2,net,01/12] sysctl: Fix data races in proc_dointvec().
https://git.kernel.org/netdev/net/c/1f1be04b4d48
- [v2,net,02/12] sysctl: Fix data races in proc_douintvec().
https://git.kernel.org/netdev/net/c/4762b532ec95
- [v2,net,03/12] sysctl: Fix data races in proc_dointvec_minmax().
https://git.kernel.org/netdev/net/c/f613d86d014b
- [v2,net,04/12] sysctl: Fix data races in proc_douintvec_minmax().
https://git.kernel.org/netdev/net/c/2d3b559df3ed
- [v2,net,05/12] sysctl: Fix data races in proc_doulongvec_minmax().
https://git.kernel.org/netdev/net/c/c31bcc8fb89f
- [v2,net,06/12] sysctl: Fix data races in proc_dointvec_jiffies().
https://git.kernel.org/netdev/net/c/e87782087766
- [v2,net,07/12] tcp: Fix a data-race around sysctl_tcp_max_orphans.
https://git.kernel.org/netdev/net/c/47e6ab24e8c6
- [v2,net,08/12] inetpeer: Fix data-races around sysctl.
https://git.kernel.org/netdev/net/c/3d32edf1f3c3
- [v2,net,09/12] net: Fix data-races around sysctl_mem.
https://git.kernel.org/netdev/net/c/310731e2f161
- [v2,net,10/12] cipso: Fix data-races around sysctl.
https://git.kernel.org/netdev/net/c/dd44f04b9214
- [v2,net,11/12] icmp: Fix data-races around sysctl.
https://git.kernel.org/netdev/net/c/48d7ee321ea5
- [v2,net,12/12] ipv4: Fix a data-race around sysctl_fib_sync_mem.
https://git.kernel.org/netdev/net/c/73318c4b7dbd
You are awesome, thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH v2 net 09/12] net: Fix data-races around sysctl_mem.
2022-07-06 23:40 ` [PATCH v2 net 09/12] net: Fix data-races around sysctl_mem Kuniyuki Iwashima
@ 2022-07-09 9:11 ` Matthieu Baerts
0 siblings, 0 replies; 19+ messages in thread
From: Matthieu Baerts @ 2022-07-09 9:11 UTC (permalink / raw)
To: Kuniyuki Iwashima, David S. Miller, Eric Dumazet, Jakub Kicinski,
Paolo Abeni, Luis Chamberlain, Kees Cook, Iurii Zaikin
Cc: Kuniyuki Iwashima, netdev, linux-kernel, MPTCP Upstream
[-- Attachment #1: Type: text/plain, Size: 782 bytes --]
Hello,
On 07/07/2022 01:40, Kuniyuki Iwashima wrote:
> While reading .sysctl_mem, it can be changed concurrently.
> So, we need to add READ_ONCE() to avoid data-races.
FYI, we got a small conflict when merging -net in net-next in the MPTCP
tree due to this patch applied in -net:
310731e2f161 ("net: Fix data-races around sysctl_mem.")
and this one from net-next:
e70f3c701276 ("Revert "net: set SK_MEM_QUANTUM to 4096"")
The conflict has been resolved on our side[1] and the resolution we
suggest is attached to this email.
I'm sharing this thinking it can help others but if it only creates
noise, please tell me! :)
Cheers,
Matt
[1] https://github.com/multipath-tcp/mptcp_net-next/commit/b01bda9d0fe6
--
Tessares | Belgium | Hybrid Access Solutions
www.tessares.net
[-- Attachment #2: b01bda9d0fe6.patch --]
[-- Type: text/x-patch, Size: 836 bytes --]
diff --cc include/net/sock.h
index 0dd43c3df49b,9fa54762e077..f7ad1a7705e9
--- a/include/net/sock.h
+++ b/include/net/sock.h
@@@ -1541,10 -1521,22 +1541,10 @@@ void __sk_mem_reclaim(struct sock *sk,
#define SK_MEM_SEND 0
#define SK_MEM_RECV 1
-/* sysctl_mem values are in pages, we convert them in SK_MEM_QUANTUM units */
+/* sysctl_mem values are in pages */
static inline long sk_prot_mem_limits(const struct sock *sk, int index)
{
- return sk->sk_prot->sysctl_mem[index];
- long val = READ_ONCE(sk->sk_prot->sysctl_mem[index]);
-
-#if PAGE_SIZE > SK_MEM_QUANTUM
- val <<= PAGE_SHIFT - SK_MEM_QUANTUM_SHIFT;
-#elif PAGE_SIZE < SK_MEM_QUANTUM
- val >>= SK_MEM_QUANTUM_SHIFT - PAGE_SHIFT;
-#endif
- return val;
++ return READ_ONCE(sk->sk_prot->sysctl_mem[index]);
}
static inline int sk_mem_pages(int amt)
^ permalink raw reply [flat|nested] 19+ messages in thread
end of thread, other threads:[~2022-07-09 9:12 UTC | newest]
Thread overview: 19+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-07-06 23:39 [PATCH v2 net 00/12] sysctl: Fix data-races around ipv4_table Kuniyuki Iwashima
2022-07-06 23:39 ` [PATCH v2 net 01/12] sysctl: Fix data races in proc_dointvec() Kuniyuki Iwashima
2022-07-06 23:39 ` [PATCH v2 net 02/12] sysctl: Fix data races in proc_douintvec() Kuniyuki Iwashima
2022-07-06 23:39 ` [PATCH v2 net 03/12] sysctl: Fix data races in proc_dointvec_minmax() Kuniyuki Iwashima
2022-07-06 23:39 ` [PATCH v2 net 04/12] sysctl: Fix data races in proc_douintvec_minmax() Kuniyuki Iwashima
2022-07-06 23:39 ` [PATCH v2 net 05/12] sysctl: Fix data races in proc_doulongvec_minmax() Kuniyuki Iwashima
2022-07-06 23:39 ` [PATCH v2 net 06/12] sysctl: Fix data races in proc_dointvec_jiffies() Kuniyuki Iwashima
2022-07-06 23:39 ` [PATCH v2 net 07/12] tcp: Fix a data-race around sysctl_tcp_max_orphans Kuniyuki Iwashima
2022-07-06 23:39 ` [PATCH v2 net 08/12] inetpeer: Fix data-races around sysctl Kuniyuki Iwashima
2022-07-06 23:40 ` [PATCH v2 net 09/12] net: Fix data-races around sysctl_mem Kuniyuki Iwashima
2022-07-09 9:11 ` Matthieu Baerts
2022-07-06 23:40 ` [PATCH v2 net 10/12] cipso: Fix data-races around sysctl Kuniyuki Iwashima
2022-07-07 19:15 ` Paul Moore
2022-07-07 22:15 ` Kuniyuki Iwashima
2022-07-08 0:24 ` Jakub Kicinski
2022-07-08 0:44 ` Kuniyuki Iwashima
2022-07-06 23:40 ` [PATCH v2 net 11/12] icmp: " Kuniyuki Iwashima
2022-07-06 23:40 ` [PATCH v2 net 12/12] ipv4: Fix a data-race around sysctl_fib_sync_mem Kuniyuki Iwashima
2022-07-08 11:50 ` [PATCH v2 net 00/12] sysctl: Fix data-races around ipv4_table patchwork-bot+netdevbpf
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).