On Wed, Jun 01, 2016 at 02:03:02PM +0800, Rui Teng wrote:
Sparse spits out the following warning:
security/commoncap.c:989:41: warning: dubious: !x | y
Bitwise and logical are equivalent here, but logical was intended.
Replacing the bit-wise '|' with the boolean '||' silences the sparse warning.
Hi,
this looks ok, but I'm worried by
The generated code for both cases is the same.
That cannot be. The logical result should be the same, but the
generated code cannot be.
I'm cc:ing Andy as this code came in with his patch. Is there an
actual reason for having used bitwise here?
thanks,
-serge
Signed-off-by: Rui Teng <rui.teng@xxxxxxxxxxxxxxxxxx>
---
security/commoncap.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/security/commoncap.c b/security/commoncap.c
index e7fadde..8f6fb24 100644
--- a/security/commoncap.c
+++ b/security/commoncap.c
@@ -976,7 +976,7 @@ int cap_task_prctl(int option, unsigned long arg2, unsigned long arg3,
case PR_CAP_AMBIENT:
if (arg2 == PR_CAP_AMBIENT_CLEAR_ALL) {
- if (arg3 | arg4 | arg5)
+ if (arg3 || arg4 || arg5)
return -EINVAL;
new = prepare_creds();
@@ -986,7 +986,7 @@ int cap_task_prctl(int option, unsigned long arg2, unsigned long arg3,
return commit_creds(new);
}
- if (((!cap_valid(arg3)) | arg4 | arg5))
+ if (((!cap_valid(arg3)) || arg4 || arg5))
return -EINVAL;
if (arg2 == PR_CAP_AMBIENT_IS_SET) {
--
2.7.4