* [RESEND PATCH] x86/tools/relocs: add __printf attribute to die() @ 2021-06-24 11:58 Greg Kroah-Hartman 2021-06-24 12:32 ` Borislav Petkov 0 siblings, 1 reply; 14+ messages in thread From: Greg Kroah-Hartman @ 2021-06-24 11:58 UTC (permalink / raw) To: x86 Cc: Greg Kroah-Hartman, Thomas Gleixner, Ingo Molnar, Borislav Petkov, H. Peter Anvin, linux-kernel There are a number of printf "mismatches" in the use of die() in x86/tools/relocs.c. Fix them up and add the printf attribute to the reloc.h header file to prevent them from ever coming back. Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Ingo Molnar <mingo@redhat.com> Cc: Borislav Petkov <bp@alien8.de> Cc: "H. Peter Anvin" <hpa@zytor.com> Cc: linux-kernel@vger.kernel.org Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> --- arch/x86/tools/relocs.c | 21 +++++++++++---------- arch/x86/tools/relocs.h | 1 + 2 files changed, 12 insertions(+), 10 deletions(-) Originally sent back in Feb, but it seems to have been missed: https://lore.kernel.org/r/20210227095356.603513-1-gregkh@linuxfoundation.org diff --git a/arch/x86/tools/relocs.c b/arch/x86/tools/relocs.c index ce7188cbdae5..c3105a8c6cde 100644 --- a/arch/x86/tools/relocs.c +++ b/arch/x86/tools/relocs.c @@ -389,7 +389,8 @@ static void read_ehdr(FILE *fp) Elf_Shdr shdr; if (fseek(fp, ehdr.e_shoff, SEEK_SET) < 0) - die("Seek to %d failed: %s\n", ehdr.e_shoff, strerror(errno)); + die("Seek to %d failed: %s\n", + (int)ehdr.e_shoff, strerror(errno)); if (fread(&shdr, sizeof(shdr), 1, fp) != 1) die("Cannot read initial ELF section header: %s\n", strerror(errno)); @@ -412,17 +413,17 @@ static void read_shdrs(FILE *fp) secs = calloc(shnum, sizeof(struct section)); if (!secs) { - die("Unable to allocate %d section headers\n", + die("Unable to allocate %ld section headers\n", shnum); } if (fseek(fp, ehdr.e_shoff, SEEK_SET) < 0) { die("Seek to %d failed: %s\n", - ehdr.e_shoff, strerror(errno)); + (int)ehdr.e_shoff, strerror(errno)); } for (i = 0; i < shnum; i++) { struct section *sec = &secs[i]; if (fread(&shdr, sizeof(shdr), 1, fp) != 1) - die("Cannot read ELF section headers %d/%d: %s\n", + die("Cannot read ELF section headers %d/%ld: %s\n", i, shnum, strerror(errno)); sec->shdr.sh_name = elf_word_to_cpu(shdr.sh_name); sec->shdr.sh_type = elf_word_to_cpu(shdr.sh_type); @@ -451,11 +452,11 @@ static void read_strtabs(FILE *fp) sec->strtab = malloc(sec->shdr.sh_size); if (!sec->strtab) { die("malloc of %d bytes for strtab failed\n", - sec->shdr.sh_size); + (int)sec->shdr.sh_size); } if (fseek(fp, sec->shdr.sh_offset, SEEK_SET) < 0) { die("Seek to %d failed: %s\n", - sec->shdr.sh_offset, strerror(errno)); + (int)sec->shdr.sh_offset, strerror(errno)); } if (fread(sec->strtab, 1, sec->shdr.sh_size, fp) != sec->shdr.sh_size) { @@ -476,11 +477,11 @@ static void read_symtabs(FILE *fp) sec->symtab = malloc(sec->shdr.sh_size); if (!sec->symtab) { die("malloc of %d bytes for symtab failed\n", - sec->shdr.sh_size); + (int)sec->shdr.sh_size); } if (fseek(fp, sec->shdr.sh_offset, SEEK_SET) < 0) { die("Seek to %d failed: %s\n", - sec->shdr.sh_offset, strerror(errno)); + (int)sec->shdr.sh_offset, strerror(errno)); } if (fread(sec->symtab, 1, sec->shdr.sh_size, fp) != sec->shdr.sh_size) { @@ -509,11 +510,11 @@ static void read_relocs(FILE *fp) sec->reltab = malloc(sec->shdr.sh_size); if (!sec->reltab) { die("malloc of %d bytes for relocs failed\n", - sec->shdr.sh_size); + (int)sec->shdr.sh_size); } if (fseek(fp, sec->shdr.sh_offset, SEEK_SET) < 0) { die("Seek to %d failed: %s\n", - sec->shdr.sh_offset, strerror(errno)); + (int)sec->shdr.sh_offset, strerror(errno)); } if (fread(sec->reltab, 1, sec->shdr.sh_size, fp) != sec->shdr.sh_size) { diff --git a/arch/x86/tools/relocs.h b/arch/x86/tools/relocs.h index 43c83c0fd22c..4c49c82446eb 100644 --- a/arch/x86/tools/relocs.h +++ b/arch/x86/tools/relocs.h @@ -17,6 +17,7 @@ #include <regex.h> #include <tools/le_byteshift.h> +__attribute__((__format__(printf, 1, 2))) void die(char *fmt, ...) __attribute__((noreturn)); #define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) -- 2.30.1 ^ permalink raw reply related [flat|nested] 14+ messages in thread
* Re: [RESEND PATCH] x86/tools/relocs: add __printf attribute to die() 2021-06-24 11:58 [RESEND PATCH] x86/tools/relocs: add __printf attribute to die() Greg Kroah-Hartman @ 2021-06-24 12:32 ` Borislav Petkov 2021-06-24 14:44 ` Greg Kroah-Hartman 2021-06-25 12:06 ` Greg Kroah-Hartman 0 siblings, 2 replies; 14+ messages in thread From: Borislav Petkov @ 2021-06-24 12:32 UTC (permalink / raw) To: Greg Kroah-Hartman Cc: x86, Thomas Gleixner, Ingo Molnar, H. Peter Anvin, linux-kernel On Thu, Jun 24, 2021 at 01:58:03PM +0200, Greg Kroah-Hartman wrote: > There are a number of printf "mismatches" in the use of die() in > x86/tools/relocs.c. Fix them up and add the printf attribute to the > reloc.h header file to prevent them from ever coming back. > > Cc: Thomas Gleixner <tglx@linutronix.de> > Cc: Ingo Molnar <mingo@redhat.com> > Cc: Borislav Petkov <bp@alien8.de> > Cc: "H. Peter Anvin" <hpa@zytor.com> > Cc: linux-kernel@vger.kernel.org > Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> > --- > arch/x86/tools/relocs.c | 21 +++++++++++---------- > arch/x86/tools/relocs.h | 1 + > 2 files changed, 12 insertions(+), 10 deletions(-) > > Originally sent back in Feb, but it seems to have been missed: > https://lore.kernel.org/r/20210227095356.603513-1-gregkh@linuxfoundation.org > > > diff --git a/arch/x86/tools/relocs.c b/arch/x86/tools/relocs.c > index ce7188cbdae5..c3105a8c6cde 100644 > --- a/arch/x86/tools/relocs.c > +++ b/arch/x86/tools/relocs.c > @@ -389,7 +389,8 @@ static void read_ehdr(FILE *fp) > Elf_Shdr shdr; > > if (fseek(fp, ehdr.e_shoff, SEEK_SET) < 0) > - die("Seek to %d failed: %s\n", ehdr.e_shoff, strerror(errno)); > + die("Seek to %d failed: %s\n", > + (int)ehdr.e_shoff, strerror(errno)); Instead of casting all those, I think you should use %zu as, apparently, we're using unsigned types for Elf{32,64}_Off and Elf{32,64}_Xword, etc. Thx. -- Regards/Gruss, Boris. https://people.kernel.org/tglx/notes-about-netiquette ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [RESEND PATCH] x86/tools/relocs: add __printf attribute to die() 2021-06-24 12:32 ` Borislav Petkov @ 2021-06-24 14:44 ` Greg Kroah-Hartman 2021-06-25 16:17 ` H. Peter Anvin 2021-06-25 12:06 ` Greg Kroah-Hartman 1 sibling, 1 reply; 14+ messages in thread From: Greg Kroah-Hartman @ 2021-06-24 14:44 UTC (permalink / raw) To: Borislav Petkov Cc: x86, Thomas Gleixner, Ingo Molnar, H. Peter Anvin, linux-kernel On Thu, Jun 24, 2021 at 02:32:43PM +0200, Borislav Petkov wrote: > On Thu, Jun 24, 2021 at 01:58:03PM +0200, Greg Kroah-Hartman wrote: > > There are a number of printf "mismatches" in the use of die() in > > x86/tools/relocs.c. Fix them up and add the printf attribute to the > > reloc.h header file to prevent them from ever coming back. > > > > Cc: Thomas Gleixner <tglx@linutronix.de> > > Cc: Ingo Molnar <mingo@redhat.com> > > Cc: Borislav Petkov <bp@alien8.de> > > Cc: "H. Peter Anvin" <hpa@zytor.com> > > Cc: linux-kernel@vger.kernel.org > > Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> > > --- > > arch/x86/tools/relocs.c | 21 +++++++++++---------- > > arch/x86/tools/relocs.h | 1 + > > 2 files changed, 12 insertions(+), 10 deletions(-) > > > > Originally sent back in Feb, but it seems to have been missed: > > https://lore.kernel.org/r/20210227095356.603513-1-gregkh@linuxfoundation.org > > > > > > diff --git a/arch/x86/tools/relocs.c b/arch/x86/tools/relocs.c > > index ce7188cbdae5..c3105a8c6cde 100644 > > --- a/arch/x86/tools/relocs.c > > +++ b/arch/x86/tools/relocs.c > > @@ -389,7 +389,8 @@ static void read_ehdr(FILE *fp) > > Elf_Shdr shdr; > > > > if (fseek(fp, ehdr.e_shoff, SEEK_SET) < 0) > > - die("Seek to %d failed: %s\n", ehdr.e_shoff, strerror(errno)); > > + die("Seek to %d failed: %s\n", > > + (int)ehdr.e_shoff, strerror(errno)); > > Instead of casting all those, I think you should use %zu as, apparently, > we're using unsigned types for Elf{32,64}_Off and Elf{32,64}_Xword, etc. Odd, I thought I tried that and something did not work. Let me try it again... ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [RESEND PATCH] x86/tools/relocs: add __printf attribute to die() 2021-06-24 14:44 ` Greg Kroah-Hartman @ 2021-06-25 16:17 ` H. Peter Anvin 0 siblings, 0 replies; 14+ messages in thread From: H. Peter Anvin @ 2021-06-25 16:17 UTC (permalink / raw) To: Greg Kroah-Hartman, Borislav Petkov Cc: x86, Thomas Gleixner, Ingo Molnar, linux-kernel %zu wouldn't DTRT for cross build. On June 24, 2021 7:44:02 AM PDT, Greg Kroah-Hartman <gregkh@linuxfoundation.org> wrote: >On Thu, Jun 24, 2021 at 02:32:43PM +0200, Borislav Petkov wrote: >> On Thu, Jun 24, 2021 at 01:58:03PM +0200, Greg Kroah-Hartman wrote: >> > There are a number of printf "mismatches" in the use of die() in >> > x86/tools/relocs.c. Fix them up and add the printf attribute to >the >> > reloc.h header file to prevent them from ever coming back. >> > >> > Cc: Thomas Gleixner <tglx@linutronix.de> >> > Cc: Ingo Molnar <mingo@redhat.com> >> > Cc: Borislav Petkov <bp@alien8.de> >> > Cc: "H. Peter Anvin" <hpa@zytor.com> >> > Cc: linux-kernel@vger.kernel.org >> > Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> >> > --- >> > arch/x86/tools/relocs.c | 21 +++++++++++---------- >> > arch/x86/tools/relocs.h | 1 + >> > 2 files changed, 12 insertions(+), 10 deletions(-) >> > >> > Originally sent back in Feb, but it seems to have been missed: >> > > https://lore.kernel.org/r/20210227095356.603513-1-gregkh@linuxfoundation.org >> > >> > >> > diff --git a/arch/x86/tools/relocs.c b/arch/x86/tools/relocs.c >> > index ce7188cbdae5..c3105a8c6cde 100644 >> > --- a/arch/x86/tools/relocs.c >> > +++ b/arch/x86/tools/relocs.c >> > @@ -389,7 +389,8 @@ static void read_ehdr(FILE *fp) >> > Elf_Shdr shdr; >> > >> > if (fseek(fp, ehdr.e_shoff, SEEK_SET) < 0) >> > - die("Seek to %d failed: %s\n", ehdr.e_shoff, strerror(errno)); >> > + die("Seek to %d failed: %s\n", >> > + (int)ehdr.e_shoff, strerror(errno)); >> >> Instead of casting all those, I think you should use %zu as, >apparently, >> we're using unsigned types for Elf{32,64}_Off and Elf{32,64}_Xword, >etc. > >Odd, I thought I tried that and something did not work. Let me try it >again... -- Sent from my Android device with K-9 Mail. Please excuse my brevity. ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [RESEND PATCH] x86/tools/relocs: add __printf attribute to die() 2021-06-24 12:32 ` Borislav Petkov 2021-06-24 14:44 ` Greg Kroah-Hartman @ 2021-06-25 12:06 ` Greg Kroah-Hartman 2021-06-25 14:12 ` Borislav Petkov 1 sibling, 1 reply; 14+ messages in thread From: Greg Kroah-Hartman @ 2021-06-25 12:06 UTC (permalink / raw) To: Borislav Petkov Cc: x86, Thomas Gleixner, Ingo Molnar, H. Peter Anvin, linux-kernel On Thu, Jun 24, 2021 at 02:32:43PM +0200, Borislav Petkov wrote: > On Thu, Jun 24, 2021 at 01:58:03PM +0200, Greg Kroah-Hartman wrote: > > There are a number of printf "mismatches" in the use of die() in > > x86/tools/relocs.c. Fix them up and add the printf attribute to the > > reloc.h header file to prevent them from ever coming back. > > > > Cc: Thomas Gleixner <tglx@linutronix.de> > > Cc: Ingo Molnar <mingo@redhat.com> > > Cc: Borislav Petkov <bp@alien8.de> > > Cc: "H. Peter Anvin" <hpa@zytor.com> > > Cc: linux-kernel@vger.kernel.org > > Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> > > --- > > arch/x86/tools/relocs.c | 21 +++++++++++---------- > > arch/x86/tools/relocs.h | 1 + > > 2 files changed, 12 insertions(+), 10 deletions(-) > > > > Originally sent back in Feb, but it seems to have been missed: > > https://lore.kernel.org/r/20210227095356.603513-1-gregkh@linuxfoundation.org > > > > > > diff --git a/arch/x86/tools/relocs.c b/arch/x86/tools/relocs.c > > index ce7188cbdae5..c3105a8c6cde 100644 > > --- a/arch/x86/tools/relocs.c > > +++ b/arch/x86/tools/relocs.c > > @@ -389,7 +389,8 @@ static void read_ehdr(FILE *fp) > > Elf_Shdr shdr; > > > > if (fseek(fp, ehdr.e_shoff, SEEK_SET) < 0) > > - die("Seek to %d failed: %s\n", ehdr.e_shoff, strerror(errno)); > > + die("Seek to %d failed: %s\n", > > + (int)ehdr.e_shoff, strerror(errno)); > > Instead of casting all those, I think you should use %zu as, apparently, > we're using unsigned types for Elf{32,64}_Off and Elf{32,64}_Xword, etc. Ah, that does not work, I tried it and I get: arch/x86/tools/relocs.c: In function ‘read_ehdr’: arch/x86/tools/relocs.c:392:40: warning: format ‘%zu’ expects argument of type ‘size_t’, but argument 2 has type ‘Elf32_Off’ {aka ‘unsigned int’} [-Wformat=] 392 | die("Seek to %zu failed: %s\n", | ~~^ | | | long unsigned int | %u 393 | ehdr.e_shoff, strerror(errno)); | ~~~~~~~~~~~~ | | | Elf32_Off {aka unsigned int} Casting seems to be the only way to make this "quiet" that I can tell. Unless someone else has a good idea? thanks, greg k-h ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [RESEND PATCH] x86/tools/relocs: add __printf attribute to die() 2021-06-25 12:06 ` Greg Kroah-Hartman @ 2021-06-25 14:12 ` Borislav Petkov 2021-06-25 16:19 ` H. Peter Anvin 0 siblings, 1 reply; 14+ messages in thread From: Borislav Petkov @ 2021-06-25 14:12 UTC (permalink / raw) To: Greg Kroah-Hartman Cc: x86, Thomas Gleixner, Ingo Molnar, H. Peter Anvin, linux-kernel On Fri, Jun 25, 2021 at 02:06:59PM +0200, Greg Kroah-Hartman wrote: > Casting seems to be the only way to make this "quiet" that I can tell. > > Unless someone else has a good idea? Hmm, so in Documentation/core-api/printk-formats.rst we say that for printk() with different size types, we should "use a format specifier of its largest possible type and explicitly cast to it." And that kinda sounds ok to me because we don't potentially lose through the casting. IOW, I guess something like this below. --- diff --git a/arch/x86/tools/relocs.c b/arch/x86/tools/relocs.c index 04c5a44b9682..42b0f425a2c7 100644 --- a/arch/x86/tools/relocs.c +++ b/arch/x86/tools/relocs.c @@ -389,7 +389,7 @@ static void read_ehdr(FILE *fp) Elf_Shdr shdr; if (fseek(fp, ehdr.e_shoff, SEEK_SET) < 0) - die("Seek to %d failed: %s\n", ehdr.e_shoff, strerror(errno)); + die("Seek to %lu failed: %s\n", (unsigned long)ehdr.e_shoff, strerror(errno)); if (fread(&shdr, sizeof(shdr), 1, fp) != 1) die("Cannot read initial ELF section header: %s\n", strerror(errno)); @@ -412,17 +412,17 @@ static void read_shdrs(FILE *fp) secs = calloc(shnum, sizeof(struct section)); if (!secs) { - die("Unable to allocate %d section headers\n", + die("Unable to allocate %ld section headers\n", shnum); } if (fseek(fp, ehdr.e_shoff, SEEK_SET) < 0) { - die("Seek to %d failed: %s\n", - ehdr.e_shoff, strerror(errno)); + die("Seek to %lu failed: %s\n", + (unsigned long)ehdr.e_shoff, strerror(errno)); } for (i = 0; i < shnum; i++) { struct section *sec = &secs[i]; if (fread(&shdr, sizeof(shdr), 1, fp) != 1) - die("Cannot read ELF section headers %d/%d: %s\n", + die("Cannot read ELF section headers %d/%ld: %s\n", i, shnum, strerror(errno)); sec->shdr.sh_name = elf_word_to_cpu(shdr.sh_name); sec->shdr.sh_type = elf_word_to_cpu(shdr.sh_type); @@ -450,12 +450,12 @@ static void read_strtabs(FILE *fp) } sec->strtab = malloc(sec->shdr.sh_size); if (!sec->strtab) { - die("malloc of %d bytes for strtab failed\n", - sec->shdr.sh_size); + die("malloc of %lu bytes for strtab failed\n", + (unsigned long)sec->shdr.sh_size); } if (fseek(fp, sec->shdr.sh_offset, SEEK_SET) < 0) { - die("Seek to %d failed: %s\n", - sec->shdr.sh_offset, strerror(errno)); + die("Seek to %lu failed: %s\n", + (unsigned long)sec->shdr.sh_offset, strerror(errno)); } if (fread(sec->strtab, 1, sec->shdr.sh_size, fp) != sec->shdr.sh_size) { @@ -475,12 +475,12 @@ static void read_symtabs(FILE *fp) } sec->symtab = malloc(sec->shdr.sh_size); if (!sec->symtab) { - die("malloc of %d bytes for symtab failed\n", - sec->shdr.sh_size); + die("malloc of %lu bytes for symtab failed\n", + (unsigned long)sec->shdr.sh_size); } if (fseek(fp, sec->shdr.sh_offset, SEEK_SET) < 0) { - die("Seek to %d failed: %s\n", - sec->shdr.sh_offset, strerror(errno)); + die("Seek to %lu failed: %s\n", + (unsigned long)sec->shdr.sh_offset, strerror(errno)); } if (fread(sec->symtab, 1, sec->shdr.sh_size, fp) != sec->shdr.sh_size) { @@ -508,12 +508,12 @@ static void read_relocs(FILE *fp) } sec->reltab = malloc(sec->shdr.sh_size); if (!sec->reltab) { - die("malloc of %d bytes for relocs failed\n", - sec->shdr.sh_size); + die("malloc of %lu bytes for relocs failed\n", + (unsigned long)sec->shdr.sh_size); } if (fseek(fp, sec->shdr.sh_offset, SEEK_SET) < 0) { - die("Seek to %d failed: %s\n", - sec->shdr.sh_offset, strerror(errno)); + die("Seek to %lu failed: %s\n", + (unsigned long)sec->shdr.sh_offset, strerror(errno)); } if (fread(sec->reltab, 1, sec->shdr.sh_size, fp) != sec->shdr.sh_size) { diff --git a/arch/x86/tools/relocs.h b/arch/x86/tools/relocs.h index 43c83c0fd22c..4c49c82446eb 100644 --- a/arch/x86/tools/relocs.h +++ b/arch/x86/tools/relocs.h @@ -17,6 +17,7 @@ #include <regex.h> #include <tools/le_byteshift.h> +__attribute__((__format__(printf, 1, 2))) void die(char *fmt, ...) __attribute__((noreturn)); #define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) -- Regards/Gruss, Boris. https://people.kernel.org/tglx/notes-about-netiquette ^ permalink raw reply related [flat|nested] 14+ messages in thread
* Re: [RESEND PATCH] x86/tools/relocs: add __printf attribute to die() 2021-06-25 14:12 ` Borislav Petkov @ 2021-06-25 16:19 ` H. Peter Anvin 2021-06-25 16:53 ` Borislav Petkov 0 siblings, 1 reply; 14+ messages in thread From: H. Peter Anvin @ 2021-06-25 16:19 UTC (permalink / raw) To: Borislav Petkov, Greg Kroah-Hartman Cc: x86, Thomas Gleixner, Ingo Molnar, linux-kernel This is a user space build time tool. You can use PRIu32/64 or cast to unsigned long long; it's not like the performance for this case is going to matter one iota. On June 25, 2021 7:12:36 AM PDT, Borislav Petkov <bp@alien8.de> wrote: >On Fri, Jun 25, 2021 at 02:06:59PM +0200, Greg Kroah-Hartman wrote: >> Casting seems to be the only way to make this "quiet" that I can >tell. >> >> Unless someone else has a good idea? > >Hmm, so in Documentation/core-api/printk-formats.rst we say that for >printk() with different size types, we should "use a format specifier >of >its largest possible type and explicitly cast to it." > >And that kinda sounds ok to me because we don't potentially lose >through >the casting. > >IOW, I guess something like this below. > >--- >diff --git a/arch/x86/tools/relocs.c b/arch/x86/tools/relocs.c >index 04c5a44b9682..42b0f425a2c7 100644 >--- a/arch/x86/tools/relocs.c >+++ b/arch/x86/tools/relocs.c >@@ -389,7 +389,7 @@ static void read_ehdr(FILE *fp) > Elf_Shdr shdr; > > if (fseek(fp, ehdr.e_shoff, SEEK_SET) < 0) >- die("Seek to %d failed: %s\n", ehdr.e_shoff, strerror(errno)); >+ die("Seek to %lu failed: %s\n", (unsigned long)ehdr.e_shoff, >strerror(errno)); > > if (fread(&shdr, sizeof(shdr), 1, fp) != 1) > die("Cannot read initial ELF section header: %s\n", >strerror(errno)); >@@ -412,17 +412,17 @@ static void read_shdrs(FILE *fp) > > secs = calloc(shnum, sizeof(struct section)); > if (!secs) { >- die("Unable to allocate %d section headers\n", >+ die("Unable to allocate %ld section headers\n", > shnum); > } > if (fseek(fp, ehdr.e_shoff, SEEK_SET) < 0) { >- die("Seek to %d failed: %s\n", >- ehdr.e_shoff, strerror(errno)); >+ die("Seek to %lu failed: %s\n", >+ (unsigned long)ehdr.e_shoff, strerror(errno)); > } > for (i = 0; i < shnum; i++) { > struct section *sec = &secs[i]; > if (fread(&shdr, sizeof(shdr), 1, fp) != 1) >- die("Cannot read ELF section headers %d/%d: %s\n", >+ die("Cannot read ELF section headers %d/%ld: %s\n", > i, shnum, strerror(errno)); > sec->shdr.sh_name = elf_word_to_cpu(shdr.sh_name); > sec->shdr.sh_type = elf_word_to_cpu(shdr.sh_type); >@@ -450,12 +450,12 @@ static void read_strtabs(FILE *fp) > } > sec->strtab = malloc(sec->shdr.sh_size); > if (!sec->strtab) { >- die("malloc of %d bytes for strtab failed\n", >- sec->shdr.sh_size); >+ die("malloc of %lu bytes for strtab failed\n", >+ (unsigned long)sec->shdr.sh_size); > } > if (fseek(fp, sec->shdr.sh_offset, SEEK_SET) < 0) { >- die("Seek to %d failed: %s\n", >- sec->shdr.sh_offset, strerror(errno)); >+ die("Seek to %lu failed: %s\n", >+ (unsigned long)sec->shdr.sh_offset, strerror(errno)); > } > if (fread(sec->strtab, 1, sec->shdr.sh_size, fp) > != sec->shdr.sh_size) { >@@ -475,12 +475,12 @@ static void read_symtabs(FILE *fp) > } > sec->symtab = malloc(sec->shdr.sh_size); > if (!sec->symtab) { >- die("malloc of %d bytes for symtab failed\n", >- sec->shdr.sh_size); >+ die("malloc of %lu bytes for symtab failed\n", >+ (unsigned long)sec->shdr.sh_size); > } > if (fseek(fp, sec->shdr.sh_offset, SEEK_SET) < 0) { >- die("Seek to %d failed: %s\n", >- sec->shdr.sh_offset, strerror(errno)); >+ die("Seek to %lu failed: %s\n", >+ (unsigned long)sec->shdr.sh_offset, strerror(errno)); > } > if (fread(sec->symtab, 1, sec->shdr.sh_size, fp) > != sec->shdr.sh_size) { >@@ -508,12 +508,12 @@ static void read_relocs(FILE *fp) > } > sec->reltab = malloc(sec->shdr.sh_size); > if (!sec->reltab) { >- die("malloc of %d bytes for relocs failed\n", >- sec->shdr.sh_size); >+ die("malloc of %lu bytes for relocs failed\n", >+ (unsigned long)sec->shdr.sh_size); > } > if (fseek(fp, sec->shdr.sh_offset, SEEK_SET) < 0) { >- die("Seek to %d failed: %s\n", >- sec->shdr.sh_offset, strerror(errno)); >+ die("Seek to %lu failed: %s\n", >+ (unsigned long)sec->shdr.sh_offset, strerror(errno)); > } > if (fread(sec->reltab, 1, sec->shdr.sh_size, fp) > != sec->shdr.sh_size) { >diff --git a/arch/x86/tools/relocs.h b/arch/x86/tools/relocs.h >index 43c83c0fd22c..4c49c82446eb 100644 >--- a/arch/x86/tools/relocs.h >+++ b/arch/x86/tools/relocs.h >@@ -17,6 +17,7 @@ > #include <regex.h> > #include <tools/le_byteshift.h> > >+__attribute__((__format__(printf, 1, 2))) > void die(char *fmt, ...) __attribute__((noreturn)); > > #define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) -- Sent from my Android device with K-9 Mail. Please excuse my brevity. ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [RESEND PATCH] x86/tools/relocs: add __printf attribute to die() 2021-06-25 16:19 ` H. Peter Anvin @ 2021-06-25 16:53 ` Borislav Petkov 2021-06-25 20:38 ` H. Peter Anvin 0 siblings, 1 reply; 14+ messages in thread From: Borislav Petkov @ 2021-06-25 16:53 UTC (permalink / raw) To: H. Peter Anvin Cc: Greg Kroah-Hartman, x86, Thomas Gleixner, Ingo Molnar, linux-kernel On Fri, Jun 25, 2021 at 09:19:38AM -0700, H. Peter Anvin wrote: > You can use PRIu32/64 or cast to unsigned long long; it's not like the > performance for this case is going to matter one iota. Why "unsigned long long"? Those fields are typedeffed as: typedef __u32 Elf32_Off; or typedef __u64 Elf64_Off; respectively so they should fit in an "unsigned long" on the respective width. -- Regards/Gruss, Boris. https://people.kernel.org/tglx/notes-about-netiquette ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [RESEND PATCH] x86/tools/relocs: add __printf attribute to die() 2021-06-25 16:53 ` Borislav Petkov @ 2021-06-25 20:38 ` H. Peter Anvin 2021-06-25 21:07 ` Borislav Petkov 0 siblings, 1 reply; 14+ messages in thread From: H. Peter Anvin @ 2021-06-25 20:38 UTC (permalink / raw) To: Borislav Petkov Cc: Greg Kroah-Hartman, x86, Thomas Gleixner, Ingo Molnar, linux-kernel 64-bit cross build on a 32-bit platform... or Windows. On June 25, 2021 9:53:10 AM PDT, Borislav Petkov <bp@alien8.de> wrote: >On Fri, Jun 25, 2021 at 09:19:38AM -0700, H. Peter Anvin wrote: >> You can use PRIu32/64 or cast to unsigned long long; it's not like >the >> performance for this case is going to matter one iota. > >Why "unsigned long long"? > >Those fields are typedeffed as: > >typedef __u32 Elf32_Off; > >or > >typedef __u64 Elf64_Off; > >respectively so they should fit in an "unsigned long" on the respective >width. -- Sent from my Android device with K-9 Mail. Please excuse my brevity. ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [RESEND PATCH] x86/tools/relocs: add __printf attribute to die() 2021-06-25 20:38 ` H. Peter Anvin @ 2021-06-25 21:07 ` Borislav Petkov 2021-06-27 15:01 ` Greg Kroah-Hartman 0 siblings, 1 reply; 14+ messages in thread From: Borislav Petkov @ 2021-06-25 21:07 UTC (permalink / raw) To: H. Peter Anvin Cc: Greg Kroah-Hartman, x86, Thomas Gleixner, Ingo Molnar, linux-kernel On Fri, Jun 25, 2021 at 01:38:51PM -0700, H. Peter Anvin wrote: > 64-bit cross build on a 32-bit platform... or Windows. Meh, nobody cares about those... :) Hmm, so looking at the PRI* inttypes.h things again, they're C99 and they kinda look more elegant as they don't make us cast stuff. So how does that look? --- diff --git a/arch/x86/tools/relocs.c b/arch/x86/tools/relocs.c index 04c5a44b9682..2582991ba216 100644 --- a/arch/x86/tools/relocs.c +++ b/arch/x86/tools/relocs.c @@ -26,6 +26,9 @@ static struct relocs relocs32; #if ELF_BITS == 64 static struct relocs relocs32neg; static struct relocs relocs64; +#define FMT PRIu64 +#else +#define FMT PRIu32 #endif struct section { @@ -389,7 +392,7 @@ static void read_ehdr(FILE *fp) Elf_Shdr shdr; if (fseek(fp, ehdr.e_shoff, SEEK_SET) < 0) - die("Seek to %d failed: %s\n", ehdr.e_shoff, strerror(errno)); + die("Seek to %" FMT " failed: %s\n", ehdr.e_shoff, strerror(errno)); if (fread(&shdr, sizeof(shdr), 1, fp) != 1) die("Cannot read initial ELF section header: %s\n", strerror(errno)); @@ -412,17 +415,17 @@ static void read_shdrs(FILE *fp) secs = calloc(shnum, sizeof(struct section)); if (!secs) { - die("Unable to allocate %d section headers\n", + die("Unable to allocate %ld section headers\n", shnum); } if (fseek(fp, ehdr.e_shoff, SEEK_SET) < 0) { - die("Seek to %d failed: %s\n", - ehdr.e_shoff, strerror(errno)); + die("Seek to %" FMT " failed: %s\n", + ehdr.e_shoff, strerror(errno)); } for (i = 0; i < shnum; i++) { struct section *sec = &secs[i]; if (fread(&shdr, sizeof(shdr), 1, fp) != 1) - die("Cannot read ELF section headers %d/%d: %s\n", + die("Cannot read ELF section headers %d/%ld: %s\n", i, shnum, strerror(errno)); sec->shdr.sh_name = elf_word_to_cpu(shdr.sh_name); sec->shdr.sh_type = elf_word_to_cpu(shdr.sh_type); @@ -450,12 +453,12 @@ static void read_strtabs(FILE *fp) } sec->strtab = malloc(sec->shdr.sh_size); if (!sec->strtab) { - die("malloc of %d bytes for strtab failed\n", - sec->shdr.sh_size); + die("malloc of %" FMT " bytes for strtab failed\n", + sec->shdr.sh_size); } if (fseek(fp, sec->shdr.sh_offset, SEEK_SET) < 0) { - die("Seek to %d failed: %s\n", - sec->shdr.sh_offset, strerror(errno)); + die("Seek to %" FMT " failed: %s\n", + sec->shdr.sh_offset, strerror(errno)); } if (fread(sec->strtab, 1, sec->shdr.sh_size, fp) != sec->shdr.sh_size) { @@ -475,12 +478,12 @@ static void read_symtabs(FILE *fp) } sec->symtab = malloc(sec->shdr.sh_size); if (!sec->symtab) { - die("malloc of %d bytes for symtab failed\n", - sec->shdr.sh_size); + die("malloc of %" FMT " bytes for symtab failed\n", + sec->shdr.sh_size); } if (fseek(fp, sec->shdr.sh_offset, SEEK_SET) < 0) { - die("Seek to %d failed: %s\n", - sec->shdr.sh_offset, strerror(errno)); + die("Seek to %" FMT " failed: %s\n", + sec->shdr.sh_offset, strerror(errno)); } if (fread(sec->symtab, 1, sec->shdr.sh_size, fp) != sec->shdr.sh_size) { @@ -508,12 +511,12 @@ static void read_relocs(FILE *fp) } sec->reltab = malloc(sec->shdr.sh_size); if (!sec->reltab) { - die("malloc of %d bytes for relocs failed\n", - sec->shdr.sh_size); + die("malloc of %" FMT " bytes for relocs failed\n", + sec->shdr.sh_size); } if (fseek(fp, sec->shdr.sh_offset, SEEK_SET) < 0) { - die("Seek to %d failed: %s\n", - sec->shdr.sh_offset, strerror(errno)); + die("Seek to %" FMT " failed: %s\n", + sec->shdr.sh_offset, strerror(errno)); } if (fread(sec->reltab, 1, sec->shdr.sh_size, fp) != sec->shdr.sh_size) { diff --git a/arch/x86/tools/relocs.h b/arch/x86/tools/relocs.h index 43c83c0fd22c..4c49c82446eb 100644 --- a/arch/x86/tools/relocs.h +++ b/arch/x86/tools/relocs.h @@ -17,6 +17,7 @@ #include <regex.h> #include <tools/le_byteshift.h> +__attribute__((__format__(printf, 1, 2))) void die(char *fmt, ...) __attribute__((noreturn)); #define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) -- Regards/Gruss, Boris. https://people.kernel.org/tglx/notes-about-netiquette ^ permalink raw reply related [flat|nested] 14+ messages in thread
* Re: [RESEND PATCH] x86/tools/relocs: add __printf attribute to die() 2021-06-25 21:07 ` Borislav Petkov @ 2021-06-27 15:01 ` Greg Kroah-Hartman 2021-06-28 14:25 ` [PATCH] x86/tools/relocs: Mark die() with the printf function attr format Borislav Petkov 0 siblings, 1 reply; 14+ messages in thread From: Greg Kroah-Hartman @ 2021-06-27 15:01 UTC (permalink / raw) To: Borislav Petkov Cc: H. Peter Anvin, x86, Thomas Gleixner, Ingo Molnar, linux-kernel On Fri, Jun 25, 2021 at 11:07:28PM +0200, Borislav Petkov wrote: > On Fri, Jun 25, 2021 at 01:38:51PM -0700, H. Peter Anvin wrote: > > 64-bit cross build on a 32-bit platform... or Windows. > > Meh, nobody cares about those... :) > > Hmm, so looking at the PRI* inttypes.h things again, they're C99 and > they kinda look more elegant as they don't make us cast stuff. > > So how does that look? > > --- > > diff --git a/arch/x86/tools/relocs.c b/arch/x86/tools/relocs.c > index 04c5a44b9682..2582991ba216 100644 > --- a/arch/x86/tools/relocs.c > +++ b/arch/x86/tools/relocs.c > @@ -26,6 +26,9 @@ static struct relocs relocs32; > #if ELF_BITS == 64 > static struct relocs relocs32neg; > static struct relocs relocs64; > +#define FMT PRIu64 > +#else > +#define FMT PRIu32 > #endif <snip> This works for me! It should fix the static checking tool that keeps tripping over this pointless warning :) Want to turn it into a real patch? thanks, greg k-h ^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH] x86/tools/relocs: Mark die() with the printf function attr format 2021-06-27 15:01 ` Greg Kroah-Hartman @ 2021-06-28 14:25 ` Borislav Petkov 2021-06-28 14:34 ` Greg Kroah-Hartman 2021-08-23 5:12 ` [tip: x86/build] " tip-bot2 for Borislav Petkov 0 siblings, 2 replies; 14+ messages in thread From: Borislav Petkov @ 2021-06-28 14:25 UTC (permalink / raw) To: Greg Kroah-Hartman Cc: H. Peter Anvin, x86, Thomas Gleixner, Ingo Molnar, linux-kernel On Sun, Jun 27, 2021 at 05:01:28PM +0200, Greg Kroah-Hartman wrote: > This works for me! It should fix the static checking tool that keeps > tripping over this pointless warning :) > > Want to turn it into a real patch? How's that? --- From: Borislav Petkov <bp@suse.de> Mark die() as a function which accepts printf-style arguments so that the compiler can typecheck them against the supplied format string. Use the C99 inttypes.h format specifiers as relocs.c gets built for both 32- and 64-bit. Original version of the patch by Greg Kroah-Hartman <gregkh@linuxfoundation.org> Signed-off-by: Borislav Petkov <bp@suse.de> --- arch/x86/tools/relocs.c | 37 ++++++++++++++++++++----------------- arch/x86/tools/relocs.h | 1 + 2 files changed, 21 insertions(+), 17 deletions(-) diff --git a/arch/x86/tools/relocs.c b/arch/x86/tools/relocs.c index 04c5a44b9682..2582991ba216 100644 --- a/arch/x86/tools/relocs.c +++ b/arch/x86/tools/relocs.c @@ -26,6 +26,9 @@ static struct relocs relocs32; #if ELF_BITS == 64 static struct relocs relocs32neg; static struct relocs relocs64; +#define FMT PRIu64 +#else +#define FMT PRIu32 #endif struct section { @@ -389,7 +392,7 @@ static void read_ehdr(FILE *fp) Elf_Shdr shdr; if (fseek(fp, ehdr.e_shoff, SEEK_SET) < 0) - die("Seek to %d failed: %s\n", ehdr.e_shoff, strerror(errno)); + die("Seek to %" FMT " failed: %s\n", ehdr.e_shoff, strerror(errno)); if (fread(&shdr, sizeof(shdr), 1, fp) != 1) die("Cannot read initial ELF section header: %s\n", strerror(errno)); @@ -412,17 +415,17 @@ static void read_shdrs(FILE *fp) secs = calloc(shnum, sizeof(struct section)); if (!secs) { - die("Unable to allocate %d section headers\n", + die("Unable to allocate %ld section headers\n", shnum); } if (fseek(fp, ehdr.e_shoff, SEEK_SET) < 0) { - die("Seek to %d failed: %s\n", - ehdr.e_shoff, strerror(errno)); + die("Seek to %" FMT " failed: %s\n", + ehdr.e_shoff, strerror(errno)); } for (i = 0; i < shnum; i++) { struct section *sec = &secs[i]; if (fread(&shdr, sizeof(shdr), 1, fp) != 1) - die("Cannot read ELF section headers %d/%d: %s\n", + die("Cannot read ELF section headers %d/%ld: %s\n", i, shnum, strerror(errno)); sec->shdr.sh_name = elf_word_to_cpu(shdr.sh_name); sec->shdr.sh_type = elf_word_to_cpu(shdr.sh_type); @@ -450,12 +453,12 @@ static void read_strtabs(FILE *fp) } sec->strtab = malloc(sec->shdr.sh_size); if (!sec->strtab) { - die("malloc of %d bytes for strtab failed\n", - sec->shdr.sh_size); + die("malloc of %" FMT " bytes for strtab failed\n", + sec->shdr.sh_size); } if (fseek(fp, sec->shdr.sh_offset, SEEK_SET) < 0) { - die("Seek to %d failed: %s\n", - sec->shdr.sh_offset, strerror(errno)); + die("Seek to %" FMT " failed: %s\n", + sec->shdr.sh_offset, strerror(errno)); } if (fread(sec->strtab, 1, sec->shdr.sh_size, fp) != sec->shdr.sh_size) { @@ -475,12 +478,12 @@ static void read_symtabs(FILE *fp) } sec->symtab = malloc(sec->shdr.sh_size); if (!sec->symtab) { - die("malloc of %d bytes for symtab failed\n", - sec->shdr.sh_size); + die("malloc of %" FMT " bytes for symtab failed\n", + sec->shdr.sh_size); } if (fseek(fp, sec->shdr.sh_offset, SEEK_SET) < 0) { - die("Seek to %d failed: %s\n", - sec->shdr.sh_offset, strerror(errno)); + die("Seek to %" FMT " failed: %s\n", + sec->shdr.sh_offset, strerror(errno)); } if (fread(sec->symtab, 1, sec->shdr.sh_size, fp) != sec->shdr.sh_size) { @@ -508,12 +511,12 @@ static void read_relocs(FILE *fp) } sec->reltab = malloc(sec->shdr.sh_size); if (!sec->reltab) { - die("malloc of %d bytes for relocs failed\n", - sec->shdr.sh_size); + die("malloc of %" FMT " bytes for relocs failed\n", + sec->shdr.sh_size); } if (fseek(fp, sec->shdr.sh_offset, SEEK_SET) < 0) { - die("Seek to %d failed: %s\n", - sec->shdr.sh_offset, strerror(errno)); + die("Seek to %" FMT " failed: %s\n", + sec->shdr.sh_offset, strerror(errno)); } if (fread(sec->reltab, 1, sec->shdr.sh_size, fp) != sec->shdr.sh_size) { diff --git a/arch/x86/tools/relocs.h b/arch/x86/tools/relocs.h index 43c83c0fd22c..4c49c82446eb 100644 --- a/arch/x86/tools/relocs.h +++ b/arch/x86/tools/relocs.h @@ -17,6 +17,7 @@ #include <regex.h> #include <tools/le_byteshift.h> +__attribute__((__format__(printf, 1, 2))) void die(char *fmt, ...) __attribute__((noreturn)); #define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) -- 2.29.2 -- Regards/Gruss, Boris. https://people.kernel.org/tglx/notes-about-netiquette ^ permalink raw reply related [flat|nested] 14+ messages in thread
* Re: [PATCH] x86/tools/relocs: Mark die() with the printf function attr format 2021-06-28 14:25 ` [PATCH] x86/tools/relocs: Mark die() with the printf function attr format Borislav Petkov @ 2021-06-28 14:34 ` Greg Kroah-Hartman 2021-08-23 5:12 ` [tip: x86/build] " tip-bot2 for Borislav Petkov 1 sibling, 0 replies; 14+ messages in thread From: Greg Kroah-Hartman @ 2021-06-28 14:34 UTC (permalink / raw) To: Borislav Petkov Cc: H. Peter Anvin, x86, Thomas Gleixner, Ingo Molnar, linux-kernel On Mon, Jun 28, 2021 at 04:25:45PM +0200, Borislav Petkov wrote: > On Sun, Jun 27, 2021 at 05:01:28PM +0200, Greg Kroah-Hartman wrote: > > This works for me! It should fix the static checking tool that keeps > > tripping over this pointless warning :) > > > > Want to turn it into a real patch? > > How's that? > > --- > From: Borislav Petkov <bp@suse.de> > > Mark die() as a function which accepts printf-style arguments so that > the compiler can typecheck them against the supplied format string. > > Use the C99 inttypes.h format specifiers as relocs.c gets built for both > 32- and 64-bit. > > Original version of the patch by Greg Kroah-Hartman <gregkh@linuxfoundation.org> > > Signed-off-by: Borislav Petkov <bp@suse.de> > --- > arch/x86/tools/relocs.c | 37 ++++++++++++++++++++----------------- > arch/x86/tools/relocs.h | 1 + > 2 files changed, 21 insertions(+), 17 deletions(-) Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> ^ permalink raw reply [flat|nested] 14+ messages in thread
* [tip: x86/build] x86/tools/relocs: Mark die() with the printf function attr format 2021-06-28 14:25 ` [PATCH] x86/tools/relocs: Mark die() with the printf function attr format Borislav Petkov 2021-06-28 14:34 ` Greg Kroah-Hartman @ 2021-08-23 5:12 ` tip-bot2 for Borislav Petkov 1 sibling, 0 replies; 14+ messages in thread From: tip-bot2 for Borislav Petkov @ 2021-08-23 5:12 UTC (permalink / raw) To: linux-tip-commits; +Cc: Borislav Petkov, Greg Kroah-Hartman, x86, linux-kernel The following commit has been merged into the x86/build branch of tip: Commit-ID: 03dca99e200f4d268f70079cf54e3b1200c9eb9d Gitweb: https://git.kernel.org/tip/03dca99e200f4d268f70079cf54e3b1200c9eb9d Author: Borislav Petkov <bp@suse.de> AuthorDate: Fri, 25 Jun 2021 17:10:16 +02:00 Committer: Borislav Petkov <bp@suse.de> CommitterDate: Mon, 23 Aug 2021 05:58:02 +02:00 x86/tools/relocs: Mark die() with the printf function attr format Mark die() as a function which accepts printf-style arguments so that the compiler can typecheck them against the supplied format string. Use the C99 inttypes.h format specifiers as relocs.c gets built for both 32- and 64-bit. Original version of the patch by Greg Kroah-Hartman <gregkh@linuxfoundation.org> Signed-off-by: Borislav Petkov <bp@suse.de> Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Link: http://lkml.kernel.org/r/YNnb6Q4QHtNYC049@zn.tnic --- arch/x86/tools/relocs.c | 37 ++++++++++++++++++++----------------- arch/x86/tools/relocs.h | 1 + 2 files changed, 21 insertions(+), 17 deletions(-) diff --git a/arch/x86/tools/relocs.c b/arch/x86/tools/relocs.c index 9ba700d..27c8220 100644 --- a/arch/x86/tools/relocs.c +++ b/arch/x86/tools/relocs.c @@ -26,6 +26,9 @@ static struct relocs relocs32; #if ELF_BITS == 64 static struct relocs relocs32neg; static struct relocs relocs64; +#define FMT PRIu64 +#else +#define FMT PRIu32 #endif struct section { @@ -389,7 +392,7 @@ static void read_ehdr(FILE *fp) Elf_Shdr shdr; if (fseek(fp, ehdr.e_shoff, SEEK_SET) < 0) - die("Seek to %d failed: %s\n", ehdr.e_shoff, strerror(errno)); + die("Seek to %" FMT " failed: %s\n", ehdr.e_shoff, strerror(errno)); if (fread(&shdr, sizeof(shdr), 1, fp) != 1) die("Cannot read initial ELF section header: %s\n", strerror(errno)); @@ -412,17 +415,17 @@ static void read_shdrs(FILE *fp) secs = calloc(shnum, sizeof(struct section)); if (!secs) { - die("Unable to allocate %d section headers\n", + die("Unable to allocate %ld section headers\n", shnum); } if (fseek(fp, ehdr.e_shoff, SEEK_SET) < 0) { - die("Seek to %d failed: %s\n", - ehdr.e_shoff, strerror(errno)); + die("Seek to %" FMT " failed: %s\n", + ehdr.e_shoff, strerror(errno)); } for (i = 0; i < shnum; i++) { struct section *sec = &secs[i]; if (fread(&shdr, sizeof(shdr), 1, fp) != 1) - die("Cannot read ELF section headers %d/%d: %s\n", + die("Cannot read ELF section headers %d/%ld: %s\n", i, shnum, strerror(errno)); sec->shdr.sh_name = elf_word_to_cpu(shdr.sh_name); sec->shdr.sh_type = elf_word_to_cpu(shdr.sh_type); @@ -450,12 +453,12 @@ static void read_strtabs(FILE *fp) } sec->strtab = malloc(sec->shdr.sh_size); if (!sec->strtab) { - die("malloc of %d bytes for strtab failed\n", - sec->shdr.sh_size); + die("malloc of %" FMT " bytes for strtab failed\n", + sec->shdr.sh_size); } if (fseek(fp, sec->shdr.sh_offset, SEEK_SET) < 0) { - die("Seek to %d failed: %s\n", - sec->shdr.sh_offset, strerror(errno)); + die("Seek to %" FMT " failed: %s\n", + sec->shdr.sh_offset, strerror(errno)); } if (fread(sec->strtab, 1, sec->shdr.sh_size, fp) != sec->shdr.sh_size) { @@ -475,12 +478,12 @@ static void read_symtabs(FILE *fp) } sec->symtab = malloc(sec->shdr.sh_size); if (!sec->symtab) { - die("malloc of %d bytes for symtab failed\n", - sec->shdr.sh_size); + die("malloc of %" FMT " bytes for symtab failed\n", + sec->shdr.sh_size); } if (fseek(fp, sec->shdr.sh_offset, SEEK_SET) < 0) { - die("Seek to %d failed: %s\n", - sec->shdr.sh_offset, strerror(errno)); + die("Seek to %" FMT " failed: %s\n", + sec->shdr.sh_offset, strerror(errno)); } if (fread(sec->symtab, 1, sec->shdr.sh_size, fp) != sec->shdr.sh_size) { @@ -508,12 +511,12 @@ static void read_relocs(FILE *fp) } sec->reltab = malloc(sec->shdr.sh_size); if (!sec->reltab) { - die("malloc of %d bytes for relocs failed\n", - sec->shdr.sh_size); + die("malloc of %" FMT " bytes for relocs failed\n", + sec->shdr.sh_size); } if (fseek(fp, sec->shdr.sh_offset, SEEK_SET) < 0) { - die("Seek to %d failed: %s\n", - sec->shdr.sh_offset, strerror(errno)); + die("Seek to %" FMT " failed: %s\n", + sec->shdr.sh_offset, strerror(errno)); } if (fread(sec->reltab, 1, sec->shdr.sh_size, fp) != sec->shdr.sh_size) { diff --git a/arch/x86/tools/relocs.h b/arch/x86/tools/relocs.h index 43c83c0..4c49c82 100644 --- a/arch/x86/tools/relocs.h +++ b/arch/x86/tools/relocs.h @@ -17,6 +17,7 @@ #include <regex.h> #include <tools/le_byteshift.h> +__attribute__((__format__(printf, 1, 2))) void die(char *fmt, ...) __attribute__((noreturn)); #define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) ^ permalink raw reply related [flat|nested] 14+ messages in thread
end of thread, other threads:[~2021-08-23 5:12 UTC | newest] Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2021-06-24 11:58 [RESEND PATCH] x86/tools/relocs: add __printf attribute to die() Greg Kroah-Hartman 2021-06-24 12:32 ` Borislav Petkov 2021-06-24 14:44 ` Greg Kroah-Hartman 2021-06-25 16:17 ` H. Peter Anvin 2021-06-25 12:06 ` Greg Kroah-Hartman 2021-06-25 14:12 ` Borislav Petkov 2021-06-25 16:19 ` H. Peter Anvin 2021-06-25 16:53 ` Borislav Petkov 2021-06-25 20:38 ` H. Peter Anvin 2021-06-25 21:07 ` Borislav Petkov 2021-06-27 15:01 ` Greg Kroah-Hartman 2021-06-28 14:25 ` [PATCH] x86/tools/relocs: Mark die() with the printf function attr format Borislav Petkov 2021-06-28 14:34 ` Greg Kroah-Hartman 2021-08-23 5:12 ` [tip: x86/build] " tip-bot2 for Borislav Petkov
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).