diff mbox series

[isar-cip-core] swupdate.bbclass: Add check if a swu file is greater than 4GB

Message ID 20250124162308.250651-1-Quirin.Gylstorff@siemens.com (mailing list archive)
State New, archived
Headers show
Series [isar-cip-core] swupdate.bbclass: Add check if a swu file is greater than 4GB | expand

Commit Message

Quirin Gylstorff Jan. 24, 2025, 4:22 p.m. UTC
From: Quirin Gylstorff <quirin.gylstorff@siemens.com>

4GB is the size limit of a file in a cpio archive. cpio prints
the following message but returns zero in that case.

```
value file size 10 out of allowed range 0..4294967295
```

The sum of files in the archive can be greater than 4GB.

This fixes Issue #125.

Signed-off-by: Quirin Gylstorff <quirin.gylstorff@siemens.com>
---
 classes/swupdate.bbclass | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

Comments

Jan Kiszka Jan. 30, 2025, 5:45 a.m. UTC | #1
On 24.01.25 17:22, Quirin Gylstorff wrote:
> From: Quirin Gylstorff <quirin.gylstorff@siemens.com>
> 
> 4GB is the size limit of a file in a cpio archive. cpio prints
> the following message but returns zero in that case.
> 
> ```
> value file size 10 out of allowed range 0..4294967295
> ```
> 
> The sum of files in the archive can be greater than 4GB.
> 
> This fixes Issue #125.
> 
> Signed-off-by: Quirin Gylstorff <quirin.gylstorff@siemens.com>
> ---
>  classes/swupdate.bbclass | 12 +++++++++++-
>  1 file changed, 11 insertions(+), 1 deletion(-)
> 
> diff --git a/classes/swupdate.bbclass b/classes/swupdate.bbclass
> index 3243f67..05291ee 100644
> --- a/classes/swupdate.bbclass
> +++ b/classes/swupdate.bbclass
> @@ -247,7 +247,17 @@ IMAGE_CMD:swu() {
>                  fi
>                  cpio_files="$cpio_files $signature_file"
>              fi
> -
> +            # check if swu_files are less than 4GBytes.
> +            # This avoids the limit of cpio
> +            for swu_file in $swu_files; do
> +                file_size =$(stat -c %s "$swu_file")
> +                if [ "$file_size" -ge 4294967295 ] ; then
> +                    echo "The size of '$swu_file': '$file_size' is greater" \
> +                          "than the limit of the swu format of 4294967295" \
> +                          "Bytes per file" 1>&2
> +                    exit 1
> +                fi
> +            done
>              # sw-description must be first file in *.swu
>              for cpio_file in $cpio_files $swu_files; do
>                  if [ -f "$cpio_file" ]; then

Thanks, applied.

Jan
diff mbox series

Patch

diff --git a/classes/swupdate.bbclass b/classes/swupdate.bbclass
index 3243f67..05291ee 100644
--- a/classes/swupdate.bbclass
+++ b/classes/swupdate.bbclass
@@ -247,7 +247,17 @@  IMAGE_CMD:swu() {
                 fi
                 cpio_files="$cpio_files $signature_file"
             fi
-
+            # check if swu_files are less than 4GBytes.
+            # This avoids the limit of cpio
+            for swu_file in $swu_files; do
+                file_size =$(stat -c %s "$swu_file")
+                if [ "$file_size" -ge 4294967295 ] ; then
+                    echo "The size of '$swu_file': '$file_size' is greater" \
+                          "than the limit of the swu format of 4294967295" \
+                          "Bytes per file" 1>&2
+                    exit 1
+                fi
+            done
             # sw-description must be first file in *.swu
             for cpio_file in $cpio_files $swu_files; do
                 if [ -f "$cpio_file" ]; then