-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
stricter warning for explicit cast to ulong
sparse issues a warning when user pointers are casted to integer types except to unsigned longs which are explicitly allowed. However it may happen that we would like to also be warned on casts to unsigned long. Fix this by adding a new warning flag: -Wcast-from-as (to mirrors -Wcast-to-as) which extends -Waddress-space to all casts that remove an address space attribute (without using __force). References: https://lore.kernel.org/lkml/[email protected]/ Signed-off-by: Luc Van Oostenryck <[email protected]>
- Loading branch information
Showing
5 changed files
with
70 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,56 @@ | ||
#define __user __attribute__((address_space(1))) | ||
|
||
typedef unsigned long ulong; | ||
typedef long long llong; | ||
typedef struct s obj_t; | ||
|
||
static void expl(int i, ulong u, llong l, void *v, obj_t *o, obj_t __user *p) | ||
{ | ||
(obj_t*)(i); | ||
(obj_t __user*)(i); | ||
|
||
(obj_t*)(u); | ||
(obj_t __user*)(u); | ||
|
||
(obj_t*)(l); | ||
(obj_t __user*)(l); | ||
|
||
(obj_t*)(v); | ||
(obj_t __user*)(v); | ||
|
||
(int)(o); | ||
(ulong)(o); | ||
(llong)(o); | ||
(void *)(o); | ||
(obj_t*)(o); | ||
(obj_t __user*)(o); | ||
|
||
(int)(p); // w | ||
(ulong)(p); // w! | ||
(llong)(p); // w | ||
(void *)(p); // w | ||
(obj_t*)(p); // w | ||
(obj_t __user*)(p); // ok | ||
} | ||
|
||
/* | ||
* check-name: Waddress-space-strict | ||
* check-command: sparse -Wcast-from-as -Wcast-to-as $file | ||
* | ||
* check-error-start | ||
Waddress-space-strict.c:10:10: warning: cast adds address space to expression (<asn:1>) | ||
Waddress-space-strict.c:13:10: warning: cast adds address space to expression (<asn:1>) | ||
Waddress-space-strict.c:16:10: warning: cast adds address space to expression (<asn:1>) | ||
Waddress-space-strict.c:19:10: warning: cast adds address space to expression (<asn:1>) | ||
Waddress-space-strict.c:26:10: warning: cast adds address space to expression (<asn:1>) | ||
Waddress-space-strict.c:28:10: warning: cast removes address space of expression | ||
Waddress-space-strict.c:29:10: warning: cast removes address space of expression | ||
Waddress-space-strict.c:30:10: warning: cast removes address space of expression | ||
Waddress-space-strict.c:31:10: warning: cast removes address space of expression | ||
Waddress-space-strict.c:32:10: warning: cast removes address space of expression | ||
Waddress-space-strict.c:9:10: warning: non size-preserving integer to pointer cast | ||
Waddress-space-strict.c:10:10: warning: non size-preserving integer to pointer cast | ||
Waddress-space-strict.c:21:10: warning: non size-preserving pointer to integer cast | ||
Waddress-space-strict.c:28:10: warning: non size-preserving pointer to integer cast | ||
* check-error-end | ||
*/ |