Antony Pavlov (4): imd: fix imd_is_crc32() imd: reuse imd_is_crc32() include/image-metadata.h: fix whitespaces in the BAREBOX_IMD_CRC macro bareboximd: make the '-c' option work again common/imd.c | 2 +- include/image-metadata.h | 8 ++++---- scripts/bareboximd.c | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) -- 2.33.0 _______________________________________________ barebox mailing list barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox
Signed-off-by: Antony Pavlov <antonynpavlov@gmail.com> --- include/image-metadata.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/image-metadata.h b/include/image-metadata.h index a9cb9cfe8f..439a0cba81 100644 --- a/include/image-metadata.h +++ b/include/image-metadata.h @@ -67,7 +67,7 @@ struct imd_entry_crc32 { static inline int imd_is_crc32(uint32_t type) { - return (type & IMD_TYPE_CRC32) ? 1 : 0; + return type == IMD_TYPE_CRC32; } static inline int imd_crc32_is_valid(uint32_t flags) -- 2.33.0 _______________________________________________ barebox mailing list barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox
Signed-off-by: Antony Pavlov <antonynpavlov@gmail.com> --- common/imd.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/imd.c b/common/imd.c index e1d5733c6b..0295d84d34 100644 --- a/common/imd.c +++ b/common/imd.c @@ -317,7 +317,7 @@ static int imd_calculate_crc32(void *input, const struct imd_header *imd_start, length = ALIGN(length, 4); length += sizeof(struct imd_header); - if (imd_read_type(imd) == IMD_TYPE_CRC32) { + if (imd_is_crc32(imd_read_type(imd))) { *imd_crc = (struct imd_header *)imd; debug("Found crc token at %d\n", end_ofs); break; -- 2.33.0 _______________________________________________ barebox mailing list barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox
Signed-off-by: Antony Pavlov <antonynpavlov@gmail.com> --- include/image-metadata.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/include/image-metadata.h b/include/image-metadata.h index 439a0cba81..bf4e08d98a 100644 --- a/include/image-metadata.h +++ b/include/image-metadata.h @@ -139,12 +139,12 @@ int imd_verify_crc32(void *buf, size_t size); } #define BAREBOX_IMD_CRC(_name, _crc, _keep_if_unused) \ - const struct imd_entry_crc32 __barebox_imd_##__name \ - __BAREBOX_IMD_SECTION(.barebox_imd_ ## _keep_if_unused ## _ ## _name) = { \ + const struct imd_entry_crc32 __barebox_imd_##__name \ + __BAREBOX_IMD_SECTION(.barebox_imd_ ## _keep_if_unused ## _ ## _name) = { \ .header.type = cpu_to_le32(IMD_TYPE_CRC32), \ .header.datalength = cpu_to_le32(sizeof(uint32_t) * 2), \ .data = _crc, \ - } + } #ifdef CONFIG_IMD void imd_used(const void *); -- 2.33.0 _______________________________________________ barebox mailing list barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox
bareboximd with the '-c' option craches while trying to alter an image file, e.g.: barebox$ git describe v2021.10.0-125-gd136ec5ac6 barebox$ make ARCH=arm CROSS_COMPILE=aarch64-linux-gnu- imx_v8_defconfig ... barebox$ make ARCH=arm CROSS_COMPILE=aarch64-linux-gnu- ... images built: barebox-nxp-imx8mm-evk.img barebox-prt-prt8mm.img barebox-nxp-imx8mn-evk.img barebox-nxp-imx8mp-evk.img barebox-nxp-imx8mq-evk.img barebox-zii-imx8mq-dev.img barebox-phytec-phycore-imx8mq.img barebox$ ./scripts/bareboximd images/barebox-phytec-phycore-imx8mq.img build: #1 Thu Oct 28 01:11:07 UTC 2021 buildsystem version: crc32: 0x00000000 release: 2021.10.0-00125-gd136ec5ac6 barebox$ ./scripts/bareboximd -c images/barebox-phytec-phycore-imx8mq.img Segmentation fault (core dumped) The problem is that the bareboximd uses mmap() on an image file in read-only mode. Signed-off-by: Antony Pavlov <antonynpavlov@gmail.com> --- scripts/bareboximd.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/bareboximd.c b/scripts/bareboximd.c index c3dcb4dcf0..fe0d274380 100644 --- a/scripts/bareboximd.c +++ b/scripts/bareboximd.c @@ -97,7 +97,7 @@ static int read_file_2(const char *filename, size_t *size, void **outbuf, size_t goto close; } - buf = mmap(NULL, max_size, PROT_READ, MAP_SHARED, fd, 0); + buf = mmap(NULL, max_size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); if (buf == MAP_FAILED ) { buf = malloc(max_size); if (!buf) { -- 2.33.0 _______________________________________________ barebox mailing list barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox
Hello Antony, On 28.10.21 03:28, Antony Pavlov wrote: > bareboximd with the '-c' option craches while > trying to alter an image file, e.g.: > > barebox$ git describe > v2021.10.0-125-gd136ec5ac6 > barebox$ make ARCH=arm CROSS_COMPILE=aarch64-linux-gnu- imx_v8_defconfig > ... > barebox$ make ARCH=arm CROSS_COMPILE=aarch64-linux-gnu- > ... > images built: > barebox-nxp-imx8mm-evk.img > barebox-prt-prt8mm.img > barebox-nxp-imx8mn-evk.img > barebox-nxp-imx8mp-evk.img > barebox-nxp-imx8mq-evk.img > barebox-zii-imx8mq-dev.img > barebox-phytec-phycore-imx8mq.img > barebox$ ./scripts/bareboximd images/barebox-phytec-phycore-imx8mq.img > build: #1 Thu Oct 28 01:11:07 UTC 2021 > buildsystem version: > crc32: 0x00000000 > release: 2021.10.0-00125-gd136ec5ac6 > barebox$ ./scripts/bareboximd -c images/barebox-phytec-phycore-imx8mq.img > Segmentation fault (core dumped) > > The problem is that the bareboximd uses mmap() on an image file > in read-only mode. > > Signed-off-by: Antony Pavlov <antonynpavlov@gmail.com> > --- > scripts/bareboximd.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/scripts/bareboximd.c b/scripts/bareboximd.c > index c3dcb4dcf0..fe0d274380 100644 > --- a/scripts/bareboximd.c > +++ b/scripts/bareboximd.c > @@ -97,7 +97,7 @@ static int read_file_2(const char *filename, size_t *size, void **outbuf, size_t > goto close; > } > > - buf = mmap(NULL, max_size, PROT_READ, MAP_SHARED, fd, 0); > + buf = mmap(NULL, max_size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); I think this here only works incidentally, by failing and then doing a malloc. See mmap(2): Errors: EACCES MAP_SHARED was requested and PROT_WRITE is set, but fd is not open in read/write (O_RDWR) mode. Correct would be MAP_PRIVATE. I sent a patch to that effect yesterday: https://lore.barebox.org/barebox/20211027060150.28184-1-a.fatoum@pengutronix.de/T/#u > if (buf == MAP_FAILED ) { > buf = malloc(max_size); > if (!buf) { > -- Pengutronix e.K. | | Steuerwalder Str. 21 | http://www.pengutronix.de/ | 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 | _______________________________________________ barebox mailing list barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox
On Thu, 28 Oct 2021 08:45:19 +0200 Ahmad Fatoum <a.fatoum@pengutronix.de> wrote: Hi Ahmad! > On 28.10.21 03:28, Antony Pavlov wrote: > > bareboximd with the '-c' option craches while > > trying to alter an image file, e.g.: > > > > barebox$ git describe > > v2021.10.0-125-gd136ec5ac6 > > barebox$ make ARCH=arm CROSS_COMPILE=aarch64-linux-gnu- imx_v8_defconfig > > ... > > barebox$ make ARCH=arm CROSS_COMPILE=aarch64-linux-gnu- > > ... > > images built: > > barebox-nxp-imx8mm-evk.img > > barebox-prt-prt8mm.img > > barebox-nxp-imx8mn-evk.img > > barebox-nxp-imx8mp-evk.img > > barebox-nxp-imx8mq-evk.img > > barebox-zii-imx8mq-dev.img > > barebox-phytec-phycore-imx8mq.img > > barebox$ ./scripts/bareboximd images/barebox-phytec-phycore-imx8mq.img > > build: #1 Thu Oct 28 01:11:07 UTC 2021 > > buildsystem version: > > crc32: 0x00000000 > > release: 2021.10.0-00125-gd136ec5ac6 > > barebox$ ./scripts/bareboximd -c images/barebox-phytec-phycore-imx8mq.img > > Segmentation fault (core dumped) > > > > The problem is that the bareboximd uses mmap() on an image file > > in read-only mode. > > > > Signed-off-by: Antony Pavlov <antonynpavlov@gmail.com> > > --- > > scripts/bareboximd.c | 2 +- > > 1 file changed, 1 insertion(+), 1 deletion(-) > > > > diff --git a/scripts/bareboximd.c b/scripts/bareboximd.c > > index c3dcb4dcf0..fe0d274380 100644 > > --- a/scripts/bareboximd.c > > +++ b/scripts/bareboximd.c > > @@ -97,7 +97,7 @@ static int read_file_2(const char *filename, size_t *size, void **outbuf, size_t > > goto close; > > } > > > > - buf = mmap(NULL, max_size, PROT_READ, MAP_SHARED, fd, 0); > > + buf = mmap(NULL, max_size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); > > I think this here only works incidentally, by failing and then doing a malloc. See mmap(2): > > Errors: EACCES MAP_SHARED was requested and PROT_WRITE is set, but fd is not open > in read/write (O_RDWR) mode. > > Correct would be MAP_PRIVATE. I sent a patch to that effect yesterday: > https://lore.barebox.org/barebox/20211027060150.28184-1-a.fatoum@pengutronix.de/T/#u Aghh! I have not seen your patch :( > > > if (buf == MAP_FAILED ) { > > buf = malloc(max_size); > > if (!buf) { > > > > > -- > Pengutronix e.K. | | > Steuerwalder Str. 21 | http://www.pengutronix.de/ | > 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | > Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 | -- Best regards, Antony Pavlov _______________________________________________ barebox mailing list barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox
On Thu, Oct 28, 2021 at 04:28:12AM +0300, Antony Pavlov wrote: > Antony Pavlov (4): > imd: fix imd_is_crc32() > imd: reuse imd_is_crc32() > include/image-metadata.h: fix whitespaces in the BAREBOX_IMD_CRC macro > bareboximd: make the '-c' option work again Applied 1-3, thanks Sascha -- Pengutronix e.K. | | Steuerwalder Str. 21 | http://www.pengutronix.de/ | 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 | _______________________________________________ barebox mailing list barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox