Message ID | BE389624-FFFE-42F1-A89F-5E5598190D4A@amazon.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On 07/04/16 at 01:55pm, Tautschnig, Michael wrote: > bin2c is used to create a valid C file out of a binary file where two > symbols will be globally defined: <name> and <name>_size. <name> is > passed as the first parameter of the host binary. > > Building using goto-cc reported that the purgatory binary code (the only > current user of this utility) declares kexec_purgatory_size as 'size_t' > where bin2c generate <name>_size to be 'int' so in a 64-bit host where > sizeof(size_t) > sizeof(int) this type mismatch will always yield the > wrong value for big-endian architectures while for little-endian it will > be wrong if the object laid in memory directly after > kexec_purgatory_size contains non-zero value at the time of reading. > > This commit changes <name>_size to be size_t instead. > > Note: > > Another way to fix the problem is to change the type of > kexec_purgatory_size to be 'int' as there's this check in code: > (kexec_purgatory_size <= 0) > > Signed-off-by: Michael Tautschnig <tautschn@amazon.com> > Cc: Michal Marek <mmarek@suse.com> > Cc: Vivek Goyal <vgoyal@redhat.com> > --- > scripts/basic/bin2c.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/scripts/basic/bin2c.c b/scripts/basic/bin2c.c > index af187e6..c3d7eef 100644 > --- a/scripts/basic/bin2c.c > +++ b/scripts/basic/bin2c.c > @@ -29,7 +29,8 @@ int main(int argc, char *argv[]) > } while (ch != EOF); > > if (argc > 1) > - printf("\t;\n\nconst int %s_size = %d;\n", argv[1], total); > + printf("\t;\n\n#include <linux/types.h>\n\nconst size_t %s_size = %d;\n", > + argv[1], total); > > return 0; > } > -- > 2.7.3.AMZN > > _______________________________________________ > kexec mailing list > kexec@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/kexec Acked-by: Dave Young <dyoung@redhat.com> Thanks Dave -- To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On 2016-07-06 10:45, Dave Young wrote: > On 07/04/16 at 01:55pm, Tautschnig, Michael wrote: >> bin2c is used to create a valid C file out of a binary file where two >> symbols will be globally defined: <name> and <name>_size. <name> is >> passed as the first parameter of the host binary. >> >> Building using goto-cc reported that the purgatory binary code (the only >> current user of this utility) declares kexec_purgatory_size as 'size_t' >> where bin2c generate <name>_size to be 'int' so in a 64-bit host where >> sizeof(size_t) > sizeof(int) this type mismatch will always yield the >> wrong value for big-endian architectures while for little-endian it will >> be wrong if the object laid in memory directly after >> kexec_purgatory_size contains non-zero value at the time of reading. >> >> This commit changes <name>_size to be size_t instead. >> >> Note: >> >> Another way to fix the problem is to change the type of >> kexec_purgatory_size to be 'int' as there's this check in code: >> (kexec_purgatory_size <= 0) >> >> Signed-off-by: Michael Tautschnig <tautschn@amazon.com> >> Cc: Michal Marek <mmarek@suse.com> >> Cc: Vivek Goyal <vgoyal@redhat.com> [...] > Acked-by: Dave Young <dyoung@redhat.com> Applied to kbuild.git#kbuild. Michal -- To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/scripts/basic/bin2c.c b/scripts/basic/bin2c.c index af187e6..c3d7eef 100644 --- a/scripts/basic/bin2c.c +++ b/scripts/basic/bin2c.c @@ -29,7 +29,8 @@ int main(int argc, char *argv[]) } while (ch != EOF); if (argc > 1) - printf("\t;\n\nconst int %s_size = %d;\n", argv[1], total); + printf("\t;\n\n#include <linux/types.h>\n\nconst size_t %s_size = %d;\n", + argv[1], total); return 0; }
bin2c is used to create a valid C file out of a binary file where two symbols will be globally defined: <name> and <name>_size. <name> is passed as the first parameter of the host binary. Building using goto-cc reported that the purgatory binary code (the only current user of this utility) declares kexec_purgatory_size as 'size_t' where bin2c generate <name>_size to be 'int' so in a 64-bit host where sizeof(size_t) > sizeof(int) this type mismatch will always yield the wrong value for big-endian architectures while for little-endian it will be wrong if the object laid in memory directly after kexec_purgatory_size contains non-zero value at the time of reading. This commit changes <name>_size to be size_t instead. Note: Another way to fix the problem is to change the type of kexec_purgatory_size to be 'int' as there's this check in code: (kexec_purgatory_size <= 0) Signed-off-by: Michael Tautschnig <tautschn@amazon.com> Cc: Michal Marek <mmarek@suse.com> Cc: Vivek Goyal <vgoyal@redhat.com> --- scripts/basic/bin2c.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) -- 2.7.3.AMZN -- To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html