All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] Add check_cmn_err
@ 2019-11-12 22:56 John Levon
  0 siblings, 0 replies; only message in thread
From: John Levon @ 2019-11-12 22:56 UTC (permalink / raw)
  To: smatch; +Cc: John Levon

This function, when supplied with a "CE_PANIC" argument, never returns:
let's teach smatch about that.
---
 check_cmn_err.c | 52 +++++++++++++++++++++++++++++++++++++++++++++++++
 check_list.h    |  1 +
 2 files changed, 53 insertions(+)
 create mode 100644 check_cmn_err.c

diff --git a/check_cmn_err.c b/check_cmn_err.c
new file mode 100644
index 00000000..1063efeb
--- /dev/null
+++ b/check_cmn_err.c
@@ -0,0 +1,52 @@
+/*
+ * Copyright (C) 2016 Oracle.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ *
+ * Copyright 2019 Joyent, Inc.
+ */
+
+/*
+ * Heavily borrowed from check_wine.c: what we're doing here is teaching smatch
+ * that cmn_err(CE_PANIC, ...) is noreturn.
+ */
+
+#include "scope.h"
+#include "smatch.h"
+#include "smatch_extra.h"
+
+#define	CE_PANIC (3)
+
+void match_cmn_err(const char *fn, struct expression *expr,
+			void *unused)
+{
+	struct expression *arg;
+	sval_t sval;
+
+	arg = get_argument_from_call_expr(expr->args, 0);
+	if (!get_implied_value(arg, &sval))
+		return;
+
+	if (sval.value == CE_PANIC)
+		nullify_path();
+}
+
+
+void check_cmn_err(int id)
+{
+	if (option_project != PROJ_ILLUMOS_KERNEL)
+		return;
+
+	add_function_hook("cmn_err", &match_cmn_err, NULL);
+}
diff --git a/check_list.h b/check_list.h
index cc3ce853..4a9c069a 100644
--- a/check_list.h
+++ b/check_list.h
@@ -200,6 +200,7 @@ CK(check_arm64_tagged)
 
 /* illumos specific */
 CK(check_all_func_returns)
+CK(check_cmn_err)
 
 #include "check_list_local.h"
 
-- 
2.17.1

^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2019-11-12 23:15 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-11-12 22:56 [PATCH] Add check_cmn_err John Levon

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.