Powered by Linux
Re: update check_cmn_err — Semantic Matching Tool

Re: update check_cmn_err

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Re-sending as plain text:D

Yes it does, thanks. Will get nice warning after adding something after ddi_err(DER_PANIC, ...:

/code/illumos-gate/usr/src/tools/proto/root_i386-nd/opt/onbld/bin/i386/smatch: ../../common/os/instance.c:1599 e_ddi_borrow_instance() warn: ignoring unreachable code.

thanks,
Toomas

> On 18. Nov 2024, at 12:42, Dan Carpenter <dan.carpenter@xxxxxxxxxx> wrote:
> 
> On Mon, Nov 18, 2024 at 10:07:42AM +0200, Toomas Soome wrote:
>> 
>> 
>>> On 18. Nov 2024, at 10:02, Dan Carpenter <dan.carpenter@xxxxxxxxxx> wrote:
>>> 
>>> On Mon, Nov 18, 2024 at 09:51:37AM +0200, Toomas Soome wrote:
>>>> Hi!
>>>> 
>>>> I would like to update work done by John Levon, there is other function,
>>>> similar to cmn_err().
>>>> 
>>> 
>>> The cmn_err() function is a function in Illumos where if you pass CE_PANIC to
>>> it then it doesn't return.  Presumably if Smatch doesn't parse this correctly,
>>> then you end up with tons of uninitialized variable false positives.  Probably
>>> other false positives as well.
>>> 
>>> Smatch is heavily tuned for the Linux kernel because that's where my focus has
>>> been for the past fifteen years.  Most of the easy parsing issues for the Linux
>>> kernel are already addressed.  Outside of the Linux kernel then Smatch is very
>>> untuned and quite bad.
>>> 
>>> regards,
>>> dan carpenter
>> 
>> Yep, this is for illumos, and since John did upstream the cmn_err() check, I
>> would like to complement it with ddi_err() as well;) We currently do have a
>> bit older version of smatch in use and I’m working to update it. Despite the
>> issues noted, it is still rather helpful of detecting problems;)
> 
> Could you test this and let me know if it works for you?
> 
> regards,
> dan carpenter
> 
> diff --git a/check_cmn_err.c b/check_cmn_err.c
> index 1063efeb4774..ebdda365d7b9 100644
> --- a/check_cmn_err.c
> +++ b/check_cmn_err.c
> @@ -26,10 +26,11 @@
> #include "smatch.h"
> #include "smatch_extra.h"
> 
> -#define CE_PANIC (3)
> +#define CE_PANIC (3)
> +#define DER_PANIC (7)
> 
> void match_cmn_err(const char *fn, struct expression *expr,
> - void *unused)
> + void *panic_value)
> {
> struct expression *arg;
> sval_t sval;
> @@ -38,7 +39,7 @@ void match_cmn_err(const char *fn, struct expression *expr,
> if (!get_implied_value(arg, &sval))
> return;
> 
> - if (sval.value == CE_PANIC)
> + if (sval.value == PTR_INT(panic_value))
> nullify_path();
> }
> 
> @@ -48,5 +49,6 @@ void check_cmn_err(int id)
> if (option_project != PROJ_ILLUMOS_KERNEL)
> return;
> 
> - add_function_hook("cmn_err", &match_cmn_err, NULL);
> + add_function_hook("cmn_err", &match_cmn_err, INT_PTR(CE_PANIC));
> + add_function_hook("ddi_err", &match_cmn_err, INT_PTR(DER_PANIC));
> }







[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux