Performing pointer arithmetic on a null pointer?
Hello, I was compiling kernel with make CC=clang-10 W=1 -s there are some places that compiler complains about pointer arithmetic like below.it says it's undefined behavior. is it just OK to use UBs like this (I hope it's not), or am I missing something? fs/kernfs/file.c:128:15: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] return NULL + !*ppos;
On Thu, May 27, 2021 at 5:15 PM Hyeonggon Yoo <42.hyeyoo@gmail.com> wrote:
Hello, I was compiling kernel with make CC=clang-10 W=1 -s
there are some places that compiler complains about pointer arithmetic like below.it says it's undefined behavior.
is it just OK to use UBs like this (I hope it's not), or am I missing something?
fs/kernfs/file.c:128:15: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] return NULL + !*ppos;
Hyeonggon, there is a patch series from Arnd Bergmann, a well-known kernel developer and janitor, hanging around here: https://git.kernel.org/pub/scm/linux/kernel/git/arnd/playground.git/log/?h=w... It includes a patch to address this issue: https://git.kernel.org/pub/scm/linux/kernel/git/arnd/playground.git/commit/?... The patch title and commit message indicates that this was submitted in multiple versions to the mailing list. You can find more on its progress on the mailing list here: https://lore.kernel.org/lkml/?q=seq_file%3A+fix+clang+warning+for+NULL+point... It seems that it has not landed in linux-next yet, though: https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/log/?qt=... The commit and discussion around it will give you much more technical details on the issue and its resolution. I hope this helps. Lukas
On Thu, May 27, 2021 at 05:27:06PM +0200, Lukas Bulwahn wrote:
Hyeonggon,
there is a patch series from Arnd Bergmann, a well-known kernel developer and janitor, hanging around here:
https://git.kernel.org/pub/scm/linux/kernel/git/arnd/playground.git/log/?h=w...
Oh, Arnd Bergmann was already working on it!
It includes a patch to address this issue:
https://git.kernel.org/pub/scm/linux/kernel/git/arnd/playground.git/commit/?...
The patch title and commit message indicates that this was submitted in multiple versions to the mailing list.
You can find more on its progress on the mailing list here: https://lore.kernel.org/lkml/?q=seq_file%3A+fix+clang+warning+for+NULL+point...
Thank you for giving some informations, it's always fun to read mailing list that I can understand :)
It seems that it has not landed in linux-next yet, though:
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/log/?qt=...
Yes I was doing it on linux-next.. :D
The commit and discussion around it will give you much more technical details on the issue and its resolution.
I hope this helps.
Lukas
Thank you for giving some links. it will be much helpful. I'm going to read it now! Hyeonggon
On Fri, May 28, 2021 at 12:14:43AM +0900, Hyeonggon Yoo wrote:
Hello, I was compiling kernel with make CC=clang-10 W=1 -s
there are some places that compiler complains about pointer arithmetic like below.it says it's undefined behavior.
is it just OK to use UBs like this (I hope it's not), or am I missing something?
fs/kernfs/file.c:128:15: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] return NULL + !*ppos;
Should work just fine, what problems have you found with that code? Also happens in a few other places in the vfs layer. Tricky code, but it works as pointer math is valid C code :) thanks, greg k-h
On Thu, May 27, 2021 at 05:32:11PM +0200, Greg KH wrote:
On Fri, May 28, 2021 at 12:14:43AM +0900, Hyeonggon Yoo wrote:
Hello, I was compiling kernel with make CC=clang-10 W=1 -s
there are some places that compiler complains about pointer arithmetic like below.it says it's undefined behavior.
is it just OK to use UBs like this (I hope it's not), or am I missing something?
fs/kernfs/file.c:128:15: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] return NULL + !*ppos;
Should work just fine, what problems have you found with that code?
Hello Greg. Yeah, that should work fine. I just wanted to understand warning that clang says!
Also happens in a few other places in the vfs layer. Tricky code, but it works as pointer math is valid C code :)
I'm searching about pointer arithmetic. Documents say that pointer math on void pointer (as NULL is void pointer) is illegal by C standards. (I can be missing something!) if above is true,then is it OK because it's valid on gcc and clang? Thanks, Hyeonggon
participants (3)
-
Greg KH -
Hyeonggon Yoo -
Lukas Bulwahn