The rationale is to replace the if (condition) { WARN_ONCE(1, ...); return value; } by WARN_ONCE_RETURN(condition, value, ...);
Signed-off-by: Andy Shevchenko <andriy.shevche...@linux.intel.com> --- include/asm-generic/bug.h | 17 +++++++++++++++++ security/smack/smack_lsm.c | 5 +---- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/include/asm-generic/bug.h b/include/asm-generic/bug.h index 630dd23..fbf20fd 100644 --- a/include/asm-generic/bug.h +++ b/include/asm-generic/bug.h @@ -126,6 +126,18 @@ extern void warn_slowpath_null(const char *file, const int line); unlikely(__ret_warn_once); \ }) +#define WARN_ONCE_RETURN(condition, value, format...) \ +do { \ + static bool __section(.data.unlikely) __warned; \ + int __ret_warn_once = !!(condition); \ + \ + if (unlikely(__ret_warn_once)) { \ + if (WARN(!__warned, format)) \ + __warned = true; \ + return value; \ + } \ +} while (0) + #define WARN_TAINT_ONCE(condition, taint, format...) ({ \ static bool __section(.data.unlikely) __warned; \ int __ret_warn_once = !!(condition); \ @@ -162,6 +174,11 @@ extern void warn_slowpath_null(const char *file, const int line); #define WARN_ON_ONCE(condition) WARN_ON(condition) #define WARN_ONCE(condition, format...) WARN(condition, format) +#define WARN_ONCE_RETURN(condition, value, format...) \ +do { \ + if (WARN(condition, format)) \ + return value; \ +} while (0) #define WARN_TAINT(condition, taint, format...) WARN(condition, format) #define WARN_TAINT_ONCE(condition, taint, format...) WARN(condition, format) diff --git a/security/smack/smack_lsm.c b/security/smack/smack_lsm.c index 54fb3a1..4160d0e 100644 --- a/security/smack/smack_lsm.c +++ b/security/smack/smack_lsm.c @@ -4401,10 +4401,7 @@ static int smack_audit_rule_match(u32 secid, u32 field, u32 op, void *vrule, struct smack_known *skp; char *rule = vrule; - if (unlikely(!rule)) { - WARN_ONCE(1, "Smack: missing rule\n"); - return -ENOENT; - } + WARN_ONCE_RETURN(unlikely(!rule), -ENOENT, "Smack: missing rule\n"); if (field != AUDIT_SUBJ_USER && field != AUDIT_OBJ_USER) return 0; -- 2.5.0 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/