Re: [PATCH RESEND] sh: sq: Use the bitmap API when applicable

From: Dan Carpenter
Date: Tue Apr 18 2023 - 05:40:53 EST


On Tue, Apr 18, 2023 at 10:30:01AM +0300, Dan Carpenter wrote:
> I have some unpublished Smatch stuff which tries to track "variable x
> is in terms of bit units or byte units etc." I will try to make a
> static checker rule for this.

Attached. It prints a warning like this:

drivers/net/ethernet/broadcom/cnic.c:667 cnic_init_id_tbl() warn: allocating units of longs instead of bytes 'test_var'

I'll test it out tonight.

regards,
dan carpenter
/*
* Copyright 2023 Linaro Ltd.
*
* 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
*/

#include "smatch.h"
#include "smatch_slist.h"

static int my_id;

static void match_allocation(struct expression *expr,
const char *name, struct symbol *sym,
struct allocation_info *info)
{
struct smatch_state *units;
char *str;

units = get_units(info->total_size);
if (!units || strcmp(units->name, "longs") != 0)
return;

str = expr_to_str(info->total_size);
sm_warning("allocating units of longs instead of bytes '%s'", str);
free_string(str);
}

void check_allocating_longs(int id)
{
my_id = id;

add_allocation_hook(&match_allocation);
}