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]
Message-ID: <04d06889d8ea41589628995a6cb53874@AcuMS.aculab.com>
Date:   Mon, 21 Feb 2022 22:33:19 +0000
From:   David Laight <David.Laight@...LAB.COM>
To:     'Masahiro Yamada' <masahiroy@...nel.org>,
        "linux-kbuild@...r.kernel.org" <linux-kbuild@...r.kernel.org>
CC:     "linux-kernel@...r.kernel.org" <linux-kernel@...r.kernel.org>,
        "Michal Marek" <michal.lkml@...kovi.net>,
        Nick Desaulniers <ndesaulniers@...gle.com>
Subject: RE: [PATCH] fixdep: use fflush() and ferror() to ensure successful
 write to files

From: Masahiro Yamada
> Sent: 21 February 2022 16:43
> To: linux-kbuild@...r.kernel.org
> 
> Checking the return value of (v)printf does not ensure the successful
> write to the .cmd file.
> 
> Call fflush() and ferror() to make sure that everything has been
> written to the file.
> 
> Signed-off-by: Masahiro Yamada <masahiroy@...nel.org>

Reviewed-by: David Laight <dvid.laight@...lab.com>

I'll note that you've lost the perror("fixdep").
But I suspect that isn't very meaningful.
If the disk is full it'd probably get lost anyway.


> ---
> 
>  scripts/basic/fixdep.c | 44 ++++++++++++++++--------------------------
>  1 file changed, 17 insertions(+), 27 deletions(-)
> 
> diff --git a/scripts/basic/fixdep.c b/scripts/basic/fixdep.c
> index 44e887cff49b..fad6f29373a9 100644
> --- a/scripts/basic/fixdep.c
> +++ b/scripts/basic/fixdep.c
> @@ -105,25 +105,6 @@ static void usage(void)
>  	exit(1);
>  }
> 
> -/*
> - * In the intended usage of this program, the stdout is redirected to .*.cmd
> - * files. The return value of printf() must be checked to catch any error,
> - * e.g. "No space left on device".
> - */
> -static void xprintf(const char *format, ...)
> -{
> -	va_list ap;
> -	int ret;
> -
> -	va_start(ap, format);
> -	ret = vprintf(format, ap);
> -	if (ret < 0) {
> -		perror("fixdep");
> -		exit(1);
> -	}
> -	va_end(ap);
> -}
> -
>  struct item {
>  	struct item	*next;
>  	unsigned int	len;
> @@ -189,7 +170,7 @@ static void use_config(const char *m, int slen)
> 
>  	define_config(m, slen, hash);
>  	/* Print out a dependency path from a symbol name. */
> -	xprintf("    $(wildcard include/config/%.*s) \\\n", slen, m);
> +	printf("    $(wildcard include/config/%.*s) \\\n", slen, m);
>  }
> 
>  /* test if s ends in sub */
> @@ -318,13 +299,13 @@ static void parse_dep_file(char *m, const char *target)
>  				 */
>  				if (!saw_any_target) {
>  					saw_any_target = 1;
> -					xprintf("source_%s := %s\n\n",
> -						target, m);
> -					xprintf("deps_%s := \\\n", target);
> +					printf("source_%s := %s\n\n",
> +					       target, m);
> +					printf("deps_%s := \\\n", target);
>  				}
>  				is_first_dep = 0;
>  			} else {
> -				xprintf("  %s \\\n", m);
> +				printf("  %s \\\n", m);
>  			}
> 
>  			buf = read_file(m);
> @@ -347,8 +328,8 @@ static void parse_dep_file(char *m, const char *target)
>  		exit(1);
>  	}
> 
> -	xprintf("\n%s: $(deps_%s)\n\n", target, target);
> -	xprintf("$(deps_%s):\n", target);
> +	printf("\n%s: $(deps_%s)\n\n", target, target);
> +	printf("$(deps_%s):\n", target);
>  }
> 
>  int main(int argc, char *argv[])
> @@ -363,11 +344,20 @@ int main(int argc, char *argv[])
>  	target = argv[2];
>  	cmdline = argv[3];
> 
> -	xprintf("cmd_%s := %s\n\n", target, cmdline);
> +	printf("cmd_%s := %s\n\n", target, cmdline);
> 
>  	buf = read_file(depfile);
>  	parse_dep_file(buf, target);
>  	free(buf);
> 
> +	fflush(stdout);
> +
> +	/*
> +	 * In the intended usage, the stdout is redirected to .*.cmd files.
> +	 * Call ferror() to catch errors such as "No space left on device".
> +	 */
> +	if (ferror(stdout))
> +		exit(1);
> +
>  	return 0;
>  }
> --
> 2.32.0

-
Registered Address Lakeside, Bramley Road, Mount Farm, Milton Keynes, MK1 1PT, UK
Registration No: 1397386 (Wales)

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ