lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:	Tue, 29 Oct 2013 09:20:23 -0700
From:	Joe Perches <joe@...ches.com>
To:	"Du, Changbin" <changbin.du@...il.com>
Cc:	jbaron@...mai.com, linux-kernel@...r.kernel.org
Subject: Re: [PATCH v3] dynamic_debug: add wildcard support to filter
 files/functions/modules

On Tue, 2013-10-29 at 21:33 +0800, Du, Changbin wrote:
> This patch add wildcard '*'(matches zero or more characters) and '?'
> (matches one character) support when qurying debug flags.

Hi again.  Some trivial notes and a possible logic error:

> diff --git a/lib/dynamic_debug.c b/lib/dynamic_debug.c
[]
> @@ -127,6 +127,43 @@ static void vpr_info_dq(const struct ddebug_query *query, const char *msg)
>  		 query->first_lineno, query->last_lineno);
>  }
>  
> +/* check if the string matches given pattern which includes wildcards */
> +static bool match_pattern(const char *pattern, const char *string)
> +{
> +	const char *s = string,
> +		   *p = pattern;

This sort of alignment is pretty unusual.
Most kernel uses just repeat the type like:

	const char *s = string;
	const char *p = pattern;

> +	bool star = 0;

	bool star = false;

> +
> +	while (*s) {
> +		switch (*p) {
> +		case '?':
> +			++s, ++p;
> +			break;
> +		case '*':
> +			star = true;
> +			string = s;
> +			if (!*++p)
> +				return true;
> +			pattern = p;;

repeated ;
Running your patches through checkpatch should find
this sort of defect.

> +			break;
> +		default:
> +			if (*s != *p) {
> +				if (!star)
> +					return false;
> +				string++;
> +				s = string;
> +				p = pattern;
> +				break;
> +			}
> +			++s, ++p;

Maybe nicer with an if/else, I think you're still
missing a reset of "star = false;" and I also think
it's better to use a break here too.

		if (*s == *p) {
			s++;
			p++;
			star = false;
		} else {
			if (!star)
				return false;
			string++;
			s = string;
			p = pattern;
		}
		break;



--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ