* [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 an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.