* [PATCH 0/2] ucount: Fix and improve atomic_long_inc_below
@ 2022-07-13 15:54 Uros Bizjak
2022-07-13 15:54 ` [PATCH 1/2] ucount: Fix atomic_long_inc_below argument type Uros Bizjak
` (2 more replies)
0 siblings, 3 replies; 5+ messages in thread
From: Uros Bizjak @ 2022-07-13 15:54 UTC (permalink / raw)
To: linux-kernel; +Cc: Uros Bizjak, Eric W. Biederman
The series fixes wrong argument type and improves atomic_long_inc_below
by using atomic_long_try_cmpxchg instead of atomic_long_cmpxchg.
Signed-off-by: Uros Bizjak <ubizjak@gmail.com>
Cc: "Eric W. Biederman" <ebiederm@xmission.com>
Uros Bizjak (2):
ucount: Fix atomic_long_inc_below argument type
ucount: Use atomic_long_try_cmpxchg in atomic_long_inc_below
kernel/ucount.c | 16 +++++++---------
1 file changed, 7 insertions(+), 9 deletions(-)
--
2.35.3
^ permalink raw reply [flat|nested] 5+ messages in thread* [PATCH 1/2] ucount: Fix atomic_long_inc_below argument type 2022-07-13 15:54 [PATCH 0/2] ucount: Fix and improve atomic_long_inc_below Uros Bizjak @ 2022-07-13 15:54 ` Uros Bizjak 2022-07-15 18:23 ` Eric W. Biederman 2022-07-13 15:54 ` [PATCH 2/2] ucount: Use atomic_long_try_cmpxchg in atomic_long_inc_below Uros Bizjak 2022-07-15 18:25 ` [PATCH 0/2] ucount: Fix and improve atomic_long_inc_below Eric W. Biederman 2 siblings, 1 reply; 5+ messages in thread From: Uros Bizjak @ 2022-07-13 15:54 UTC (permalink / raw) To: linux-kernel; +Cc: Uros Bizjak, Eric W. Biederman The type of u argument of atomic_long_inc_below should be long to avoid unwanted truncation to int. Fixes: f9c82a4ea89c ("Increase size of ucounts to atomic_long_t") Signed-off-by: Uros Bizjak <ubizjak@gmail.com> Cc: "Eric W. Biederman" <ebiederm@xmission.com> --- kernel/ucount.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kernel/ucount.c b/kernel/ucount.c index 06ea04d44685..974ac1585009 100644 --- a/kernel/ucount.c +++ b/kernel/ucount.c @@ -216,7 +216,7 @@ void put_ucounts(struct ucounts *ucounts) } } -static inline bool atomic_long_inc_below(atomic_long_t *v, int u) +static inline bool atomic_long_inc_below(atomic_long_t *v, long u) { long c, old; c = atomic_long_read(v); -- 2.35.3 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH 1/2] ucount: Fix atomic_long_inc_below argument type 2022-07-13 15:54 ` [PATCH 1/2] ucount: Fix atomic_long_inc_below argument type Uros Bizjak @ 2022-07-15 18:23 ` Eric W. Biederman 0 siblings, 0 replies; 5+ messages in thread From: Eric W. Biederman @ 2022-07-15 18:23 UTC (permalink / raw) To: Uros Bizjak; +Cc: linux-kernel, Alexey Gladkov Uros Bizjak <ubizjak@gmail.com> writes: > The type of u argument of atomic_long_inc_below should be long > to avoid unwanted truncation to int. Reviewed-by: "Eric W. Biederman" <ebiederm@xmission.com> > > Fixes: f9c82a4ea89c ("Increase size of ucounts to atomic_long_t") > Signed-off-by: Uros Bizjak <ubizjak@gmail.com> > Cc: "Eric W. Biederman" <ebiederm@xmission.com> > --- > kernel/ucount.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/kernel/ucount.c b/kernel/ucount.c > index 06ea04d44685..974ac1585009 100644 > --- a/kernel/ucount.c > +++ b/kernel/ucount.c > @@ -216,7 +216,7 @@ void put_ucounts(struct ucounts *ucounts) > } > } > > -static inline bool atomic_long_inc_below(atomic_long_t *v, int u) > +static inline bool atomic_long_inc_below(atomic_long_t *v, long u) > { > long c, old; > c = atomic_long_read(v); ^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH 2/2] ucount: Use atomic_long_try_cmpxchg in atomic_long_inc_below 2022-07-13 15:54 [PATCH 0/2] ucount: Fix and improve atomic_long_inc_below Uros Bizjak 2022-07-13 15:54 ` [PATCH 1/2] ucount: Fix atomic_long_inc_below argument type Uros Bizjak @ 2022-07-13 15:54 ` Uros Bizjak 2022-07-15 18:25 ` [PATCH 0/2] ucount: Fix and improve atomic_long_inc_below Eric W. Biederman 2 siblings, 0 replies; 5+ messages in thread From: Uros Bizjak @ 2022-07-13 15:54 UTC (permalink / raw) To: linux-kernel; +Cc: Uros Bizjak, Eric W. Biederman Use atomic_long_try_cmpxchg instead of atomic_long_cmpxchg (*ptr, old, new) == old in atomic_long_inc_below. x86 CMPXCHG instruction returns success in ZF flag, so this change saves a compare after cmpxchg (and related move instruction in front of cmpxchg). Also, atomic_long_try_cmpxchg implicitly assigns old *ptr value to "old" when cmpxchg fails, enabling further code simplifications. No functional change intended. Signed-off-by: Uros Bizjak <ubizjak@gmail.com> Cc: "Eric W. Biederman" <ebiederm@xmission.com> --- kernel/ucount.c | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/kernel/ucount.c b/kernel/ucount.c index 974ac1585009..5d980460104e 100644 --- a/kernel/ucount.c +++ b/kernel/ucount.c @@ -218,16 +218,14 @@ void put_ucounts(struct ucounts *ucounts) static inline bool atomic_long_inc_below(atomic_long_t *v, long u) { - long c, old; - c = atomic_long_read(v); - for (;;) { + long c = atomic_long_read(v); + + do { if (unlikely(c >= u)) return false; - old = atomic_long_cmpxchg(v, c, c+1); - if (likely(old == c)) - return true; - c = old; - } + } while (!atomic_long_try_cmpxchg(v, &c, c+1)); + + return true; } struct ucounts *inc_ucount(struct user_namespace *ns, kuid_t uid, -- 2.35.3 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH 0/2] ucount: Fix and improve atomic_long_inc_below 2022-07-13 15:54 [PATCH 0/2] ucount: Fix and improve atomic_long_inc_below Uros Bizjak 2022-07-13 15:54 ` [PATCH 1/2] ucount: Fix atomic_long_inc_below argument type Uros Bizjak 2022-07-13 15:54 ` [PATCH 2/2] ucount: Use atomic_long_try_cmpxchg in atomic_long_inc_below Uros Bizjak @ 2022-07-15 18:25 ` Eric W. Biederman 2 siblings, 0 replies; 5+ messages in thread From: Eric W. Biederman @ 2022-07-15 18:25 UTC (permalink / raw) To: Uros Bizjak; +Cc: linux-kernel, Alexey Gladkov Uros Bizjak <ubizjak@gmail.com> writes: > The series fixes wrong argument type and improves atomic_long_inc_below > by using atomic_long_try_cmpxchg instead of atomic_long_cmpxchg. > > Signed-off-by: Uros Bizjak <ubizjak@gmail.com> > Cc: "Eric W. Biederman" <ebiederm@xmission.com> The bug fix at least looks correct. I haven't reviewed the atomic_long_try_cmpxchg yet. Thanks, Eric > > Uros Bizjak (2): > ucount: Fix atomic_long_inc_below argument type > ucount: Use atomic_long_try_cmpxchg in atomic_long_inc_below > > kernel/ucount.c | 16 +++++++--------- > 1 file changed, 7 insertions(+), 9 deletions(-) ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2022-07-15 18:25 UTC | newest] Thread overview: 5+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2022-07-13 15:54 [PATCH 0/2] ucount: Fix and improve atomic_long_inc_below Uros Bizjak 2022-07-13 15:54 ` [PATCH 1/2] ucount: Fix atomic_long_inc_below argument type Uros Bizjak 2022-07-15 18:23 ` Eric W. Biederman 2022-07-13 15:54 ` [PATCH 2/2] ucount: Use atomic_long_try_cmpxchg in atomic_long_inc_below Uros Bizjak 2022-07-15 18:25 ` [PATCH 0/2] ucount: Fix and improve atomic_long_inc_below Eric W. Biederman
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox