Hello,

I am seeing some signed-integer-overflow in percpu reference counters.

        UBSAN: signed-integer-overflow in 
./arch/arm64/include/asm/atomic_lse.h:204:1
        -9223372036854775808 - 1 cannot be represented in type 's64' (aka 'long 
long')
        Call trace:

         handle_overflow
         __ubsan_handle_sub_overflow
         percpu_ref_put_many
         css_put
         cgroup_sk_free
         __sk_destruct
         __sk_free
         sk_free
         unix_release_sock
         unix_release
         sock_close

This overflow is probably happening in percpu_ref->percpu_ref_data->count.

Looking at the code documentation, it seems that overflows are fine in
per-cpu values. The lib/percpu-refcount.c code comment says:

 * Note that the counter on a particular cpu can (and will) wrap - this
 * is fine, when we go to shutdown the percpu counters will all sum to
 * the correct value

Is there a way to annotate the code to tell UBSAN that this overflow is
expected and it shouldn't be reported?

Thanks
--breno


Reply via email to