Message ID | 20230725105827.1119167-1-james.clark@arm.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [v2] scripts/kallsyms: Fix build failure by setting errno before calling getline() | expand |
On Tue, Jul 25, 2023 at 7:58 PM James Clark <james.clark@arm.com> wrote: > > getline() returns -1 at EOF as well as on error. It also doesn't set > errno to 0 on success, so initialize it to 0 before using errno to check > for an error condition. See the paragraph here [1]: > > For some system calls and library functions (e.g., getpriority(2)), > -1 is a valid return on success. In such cases, a successful return > can be distinguished from an error return by setting errno to zero > before the call, and then, if the call returns a status that indicates > that an error may have occurred, checking to see if errno has a > nonzero value. > > Bear has a bug [2] that launches processes with errno set and causes the > following build failure: > > $ bear -- make LLVM=1 > ... > LD .tmp_vmlinux.kallsyms1 > NM .tmp_vmlinux.kallsyms1.syms > KSYMS .tmp_vmlinux.kallsyms1.S > read_symbol: Invalid argument > > [1]: https://linux.die.net/man/3/errno > [2]: https://github.com/rizsotto/Bear/issues/469 > > Fixes: 1c975da56a6f ("scripts/kallsyms: remove KSYM_NAME_LEN_BUFFER") > Reviewed-by: Miguel Ojeda <ojeda@kernel.org> > Signed-off-by: James Clark <james.clark@arm.com> Applied to linux-kbuild/fixes. Thanks. > --- > scripts/kallsyms.c | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/scripts/kallsyms.c b/scripts/kallsyms.c > index 16c87938b316..653b92f6d4c8 100644 > --- a/scripts/kallsyms.c > +++ b/scripts/kallsyms.c > @@ -129,6 +129,7 @@ static struct sym_entry *read_symbol(FILE *in, char **buf, size_t *buf_len) > ssize_t readlen; > struct sym_entry *sym; > > + errno = 0; > readlen = getline(buf, buf_len, in); > if (readlen < 0) { > if (errno) { > -- > 2.34.1 >
diff --git a/scripts/kallsyms.c b/scripts/kallsyms.c index 16c87938b316..653b92f6d4c8 100644 --- a/scripts/kallsyms.c +++ b/scripts/kallsyms.c @@ -129,6 +129,7 @@ static struct sym_entry *read_symbol(FILE *in, char **buf, size_t *buf_len) ssize_t readlen; struct sym_entry *sym; + errno = 0; readlen = getline(buf, buf_len, in); if (readlen < 0) { if (errno) {