gru: cleanup gru_dump_context() a little
Subsystems (2)
PATCH 2/2 gru: cleanup gru_dump_context() a little
"ret" is zero here so we can remove the "!ret" part of the condition. "uhdr" is alread a __user pointer so we can remove the cast.
---
Btw, speaking of __user pointers there are some places where we dereference them in this file. It's not a security problem because we have already used copy_to_user() to successfully write to the pointer at point. But if you have something like PAX which puts user pointers and kernel pointers in a separate address space then this will cause problems.
Run sparse to see the issue.
drivers/misc/sgi-gru/grukdump.c +3 -3
@@ -178,10 +178,10 @@ static int gru_dump_context(struct gru_state *gru, int ctxnum, hdr.cbrcnt = cbrcnt; hdr.dsrcnt = dsrcnt; hdr.cch_locked = cch_locked; -if (!ret &©_to_user ((void __user *)uhdr, &hdr,sizeof (hdr))) - ret = -EFAULT ; +if (copy_to_user (uhdr, &hdr,sizeof (hdr))) +return -EFAULT ; -return ret ? ret : bytes; +return bytes; }int gru_dump_chiplet_request (unsigned long arg)
Quoted 32 lines · Dan Carpenter
"ret" is zero here so we can remove the "!ret" part of the condition. "uhdr" is alread a
__userpointer so we can remove the cast.Signed-off-by Dan Carpenter <[email protected]>---
Btw, speaking of__userpointers there are some places where we dereference them in this file. It's not a security problem because we have already usedcopy_to_user()to successfully write to the pointer at point. But if you have something like PAX which puts user pointers and kernel pointers in a separate address space then this will cause problems.Run sparse to see the issue.
drivers/misc/sgi-gru/grukdump.c +3
-3@@ -178,10 +178,10 @@ static int gru_dump_context(struct gru_state *gru, int ctxnum, hdr.cbrcnt = cbrcnt; hdr.dsrcnt = dsrcnt; hdr.cch_locked = cch_locked; -if (!ret &©_to_user ((void __user *)uhdr, &hdr,sizeof (hdr))) - ret = -EFAULT ; +if (copy_to_user (uhdr, &hdr,sizeof (hdr))) +return -EFAULT ; -return ret ? ret : bytes; +return bytes; }int gru_dump_chiplet_request (unsigned long arg)