[LTP] [PATCH] lib: Handle empty saved configuration values
Martin Doucha
mdoucha@suse.cz
Tue Sep 29 18:16:39 CEST 2026
Hi,
one suggestion below.
On 9/29/26 16:15, Andrea Cervesato wrote:
> From: Andrea Cervesato <andrea.cervesato@suse.com>
>
> Empty string module parameters return EOF on older kernels, causing
> fw_load02 to abort with TBROK on v4.4.
>
> Accept empty values while retaining read-error handling and the original
> errno. Restore empty strings with a NUL byte: an empty write does not
> invoke the sysfs setter, while a newline would change the saved value.
>
> Signed-off-by: Andrea Cervesato <andrea.cervesato@suse.com>
> ---
> Fix the following behaviour on kernel < 4.14 96802e6b1dbf
>
> tst_kconfig.c:90: TINFO: Parsing kernel config '/proc/config.gz'
> tst_kconfig.c:90: TINFO: Parsing kernel config '/proc/config.gz'
> tst_kconfig.c:90: TINFO: Parsing kernel config '/proc/config.gz'
> tst_security.c:115: TINFO: SecureBoot sysfs file not available
> tst_security.c:94: TINFO: Unable to determine system lockdown state
> tst_security.c:115: TINFO: SecureBoot sysfs file not available
> tst_tmpdir.c:309: TINFO: Using /tmp/LTP_fw_ZRzLML as tmpdir (btrfs filesystem)
> tst_sys_conf.c:103: TBROK: Failed to read anything from '/sys/module/firmware_class/parameters/path': SUCCESS (0)
>
> Summary:
> passed 0
> failed 0
> broken 1
> skipped 0
> warnings 0
> ---
> lib/tst_sys_conf.c | 27 ++++++++++++++++++++++-----
> 1 file changed, 22 insertions(+), 5 deletions(-)
>
> diff --git a/lib/tst_sys_conf.c b/lib/tst_sys_conf.c
> index 80cd83569..a62af4a94 100644
> --- a/lib/tst_sys_conf.c
> +++ b/lib/tst_sys_conf.c
> @@ -56,6 +56,7 @@ int tst_sys_conf_save(const struct tst_path_val *conf)
> {
> char line[PATH_MAX];
> int ttype, iret;
> + int read_err, saved_errno;
> FILE *fp;
> void *ret;
>
> @@ -93,14 +94,23 @@ int tst_sys_conf_save(const struct tst_path_val *conf)
> }
>
> ret = fgets(line, sizeof(line), fp);
> + saved_errno = errno;
> + read_err = ferror(fp);
> +
> fclose(fp);
>
> if (ret == NULL) {
> - if (conf->flags & TST_SR_IGNORE_ERR)
> - return 1;
> + if (read_err) {
> + if (conf->flags & TST_SR_IGNORE_ERR)
> + return 1;
> +
> + errno = saved_errno;
> + tst_brk(TBROK | TERRNO, "Failed to read anything from '%s'",
> + conf->path);
> + }
>
> - tst_brk(TBROK | TERRNO, "Failed to read anything from '%s'",
> - conf->path);
> + /* Empty string module parameters can return EOF on older kernels. */
> + line[0] = '\0';
> }
>
I think you can drop most of this chunk and do two things instead:
1) char line[PATH_MAX] = {};
2) if (ret == NULL) -> if (read_err).
--
Martin Doucha mdoucha@suse.cz
SW Quality Engineer
SUSE LINUX, s.r.o.
CORSO IIa
Krizikova 148/34
186 00 Prague 8
Czech Republic
More information about the ltp
mailing list