diff mbox series

JFFS2: fix jffs2 summary datacrc status uninitialized

Message ID 77fd41b0ee01fa49e03c7bd456dd7d5bc1d75462.camel@gmail.com
State Accepted
Commit fc25ffe7d2277ff043f76821452bfc8d05a80bd7
Delegated to: Tom Rini
Headers show
Series JFFS2: fix jffs2 summary datacrc status uninitialized | expand

Commit Message

Wagner Popov dos Santos Feb. 23, 2021, 3:49 a.m. UTC
The function jffs2_1pass_read_inode() was discarding the summary
inodes and dirent because the value in datacrc flag wasn't
initialized in function jffs2_sum_process_sum_data().

This fix initializes the status of all summary records to indicate
that the CRC needs to be verified when they are loaded.

Before this fix, the behaviors produced by the undefined value of
datacrc was:
- Summary's registries were discarded when 'b->datacrc' is equal
  as 'CRC_BAD'.
- Summary's registries were not checked when b->datacrc differs of
  'CRC_BAD' and 'CRC_UNKNOWN'

So, almost all of the time the crc just isn't checked, and in some
cases the registries are discarded.

Signed-off-by: Wagner Popov dos Santos <wpopov@gmail.com>
---
 fs/jffs2/jffs2_1pass.c | 2 ++
 1 file changed, 2 insertions(+)

Comments

Wagner Popov dos Santos March 4, 2021, 12:36 a.m. UTC | #1
Forgot to Cc the maintainer, doing it now, sorry for the spam.

On ter, 2021-02-23 às 00:49 -0300, Wagner Popov dos Santos wrote:
> The function jffs2_1pass_read_inode() was discarding the summary
> inodes and dirent because the value in datacrc flag wasn't
> initialized in function jffs2_sum_process_sum_data().
> 
> This fix initializes the status of all summary records to indicate
> that the CRC needs to be verified when they are loaded.
> 
> Before this fix, the behaviors produced by the undefined value of
> datacrc was:
> - Summary's registries were discarded when 'b->datacrc' is equal
>   as 'CRC_BAD'.
> - Summary's registries were not checked when b->datacrc differs of
>   'CRC_BAD' and 'CRC_UNKNOWN'
> 
> So, almost all of the time the crc just isn't checked, and in some
> cases the registries are discarded.
> 
> Signed-off-by: Wagner Popov dos Santos <wpopov@gmail.com>
> ---
>  fs/jffs2/jffs2_1pass.c | 2 ++
>  1 file changed, 2 insertions(+)
> 
> diff --git a/fs/jffs2/jffs2_1pass.c b/fs/jffs2/jffs2_1pass.c
> index a98745c50e..c9eda54cdb 100644
> --- a/fs/jffs2/jffs2_1pass.c
> +++ b/fs/jffs2/jffs2_1pass.c
> @@ -1276,6 +1276,7 @@ static int jffs2_sum_process_sum_data(struct part_info *part, uint32_t offset,
>  							&spi->version);
>  						b->ino = sum_get_unaligned32(
>  							&spi->inode);
> +						b->datacrc = CRC_UNKNOWN;
>  					}
>  
>  					sp += JFFS2_SUMMARY_INODE_SIZE;
> @@ -1297,6 +1298,7 @@ static int jffs2_sum_process_sum_data(struct part_info *part, uint32_t offset,
>  							&spd->version);
>  						b->pino = sum_get_unaligned32(
>  							&spd->pino);
> +						b->datacrc = CRC_UNKNOWN;
>  					}
>  
>  					sp += JFFS2_SUMMARY_DIRENT_SIZE(
Tom Rini April 7, 2021, 11:05 p.m. UTC | #2
On Tue, Feb 23, 2021 at 12:49:00AM -0300, Wagner Popov dos Santos wrote:

> The function jffs2_1pass_read_inode() was discarding the summary
> inodes and dirent because the value in datacrc flag wasn't
> initialized in function jffs2_sum_process_sum_data().
> 
> This fix initializes the status of all summary records to indicate
> that the CRC needs to be verified when they are loaded.
> 
> Before this fix, the behaviors produced by the undefined value of
> datacrc was:
> - Summary's registries were discarded when 'b->datacrc' is equal
>   as 'CRC_BAD'.
> - Summary's registries were not checked when b->datacrc differs of
>   'CRC_BAD' and 'CRC_UNKNOWN'
> 
> So, almost all of the time the crc just isn't checked, and in some
> cases the registries are discarded.
> 
> Signed-off-by: Wagner Popov dos Santos <wpopov@gmail.com>

Applied to u-boot/master, thanks!
diff mbox series

Patch

diff --git a/fs/jffs2/jffs2_1pass.c b/fs/jffs2/jffs2_1pass.c
index a98745c50e..c9eda54cdb 100644
--- a/fs/jffs2/jffs2_1pass.c
+++ b/fs/jffs2/jffs2_1pass.c
@@ -1276,6 +1276,7 @@  static int jffs2_sum_process_sum_data(struct part_info *part, uint32_t offset,
 							&spi->version);
 						b->ino = sum_get_unaligned32(
 							&spi->inode);
+						b->datacrc = CRC_UNKNOWN;
 					}
 
 					sp += JFFS2_SUMMARY_INODE_SIZE;
@@ -1297,6 +1298,7 @@  static int jffs2_sum_process_sum_data(struct part_info *part, uint32_t offset,
 							&spd->version);
 						b->pino = sum_get_unaligned32(
 							&spd->pino);
+						b->datacrc = CRC_UNKNOWN;
 					}
 
 					sp += JFFS2_SUMMARY_DIRENT_SIZE(