Blame SOURCES/0001-Open-Unix.LargeFile-to-avoid-lstat-Value-too-large-f.patch

6de019
From 90251e796a14cd7ce77ad7f07fd1fbe5d3a43664 Mon Sep 17 00:00:00 2001
ae7a9d
From: "Richard W.M. Jones" <rjones@redhat.com>
ae7a9d
Date: Mon, 1 Feb 2021 10:07:02 +0000
6de019
Subject: [PATCH 1/4] Open Unix.LargeFile to avoid "lstat: Value too large for
ae7a9d
 defined data type".
ae7a9d
ae7a9d
On 32 bit platforms, because OCaml native ints are limited to 31 bits,
ae7a9d
there is a trap in the normal Unix.stat, Unix.lstat functions where
ae7a9d
any field in the stat struct may overflow.  The result is random
ae7a9d
errors like:
ae7a9d
ae7a9d
  supermin: error: lstat: Value too large for defined data type: /tmp/tmp.Ss9aYEBASm/d2/root
ae7a9d
ae7a9d
You would probably only see this on armv7.
ae7a9d
ae7a9d
The OCaml Unix module has a "LargeFile" submodule which fixes this by
ae7a9d
using int64 for some (unfortunately not all) fields.
ae7a9d
ae7a9d
For more information see the OCaml sources, file
ae7a9d
otherlibs/unix/stat.c, all instances of "EOVERFLOW".
ae7a9d
---
ae7a9d
 src/format_chroot.ml      | 1 +
ae7a9d
 src/format_ext2.ml        | 1 +
ae7a9d
 src/format_ext2_initrd.ml | 1 +
ae7a9d
 src/format_ext2_kernel.ml | 5 +++--
ae7a9d
 src/mode_build.ml         | 1 +
ae7a9d
 src/package_handler.ml    | 1 +
ae7a9d
 src/ph_dpkg.ml            | 1 +
ae7a9d
 src/ph_pacman.ml          | 1 +
ae7a9d
 src/ph_rpm.ml             | 1 +
ae7a9d
 src/supermin.ml           | 1 +
ae7a9d
 src/utils.ml              | 1 +
ae7a9d
 11 files changed, 13 insertions(+), 2 deletions(-)
ae7a9d
ae7a9d
diff --git a/src/format_chroot.ml b/src/format_chroot.ml
ae7a9d
index 346c24b..34606f7 100644
ae7a9d
--- a/src/format_chroot.ml
ae7a9d
+++ b/src/format_chroot.ml
ae7a9d
@@ -17,6 +17,7 @@
ae7a9d
  *)
ae7a9d
 
ae7a9d
 open Unix
ae7a9d
+open Unix.LargeFile
ae7a9d
 open Printf
ae7a9d
 
ae7a9d
 open Utils
ae7a9d
diff --git a/src/format_ext2.ml b/src/format_ext2.ml
ae7a9d
index 6348c29..e311ea6 100644
ae7a9d
--- a/src/format_ext2.ml
ae7a9d
+++ b/src/format_ext2.ml
ae7a9d
@@ -17,6 +17,7 @@
ae7a9d
  *)
ae7a9d
 
ae7a9d
 open Unix
ae7a9d
+open Unix.LargeFile
ae7a9d
 open Printf
ae7a9d
 
ae7a9d
 open Utils
ae7a9d
diff --git a/src/format_ext2_initrd.ml b/src/format_ext2_initrd.ml
ae7a9d
index 38977e6..6268442 100644
ae7a9d
--- a/src/format_ext2_initrd.ml
ae7a9d
+++ b/src/format_ext2_initrd.ml
ae7a9d
@@ -17,6 +17,7 @@
ae7a9d
  *)
ae7a9d
 
ae7a9d
 open Unix
ae7a9d
+open Unix.LargeFile
ae7a9d
 open Printf
ae7a9d
 
ae7a9d
 open Utils
ae7a9d
diff --git a/src/format_ext2_kernel.ml b/src/format_ext2_kernel.ml
ae7a9d
index 98bff3a..3be4413 100644
ae7a9d
--- a/src/format_ext2_kernel.ml
ae7a9d
+++ b/src/format_ext2_kernel.ml
ae7a9d
@@ -17,6 +17,7 @@
ae7a9d
  *)
ae7a9d
 
ae7a9d
 open Unix
ae7a9d
+open Unix.LargeFile
ae7a9d
 open Printf
ae7a9d
 
ae7a9d
 open Utils
ae7a9d
@@ -95,8 +96,8 @@ and find_kernel_from_lib_modules debug =
ae7a9d
     let kernels =
ae7a9d
       filter_map (
ae7a9d
         fun kernel_file ->
ae7a9d
-          let size = try (stat kernel_file).st_size with Unix_error _ -> 0 in
ae7a9d
-          if size < 10000 then None
ae7a9d
+          let size = try (stat kernel_file).st_size with Unix_error _ -> 0L in
ae7a9d
+          if size < 10000_L then None
ae7a9d
           else (
ae7a9d
             let kernel_name = Filename.basename kernel_file in
ae7a9d
             let modpath = Filename.dirname kernel_file in
ae7a9d
diff --git a/src/mode_build.ml b/src/mode_build.ml
ae7a9d
index ed47366..ff7733e 100644
ae7a9d
--- a/src/mode_build.ml
ae7a9d
+++ b/src/mode_build.ml
ae7a9d
@@ -17,6 +17,7 @@
ae7a9d
  *)
ae7a9d
 
ae7a9d
 open Unix
ae7a9d
+open Unix.LargeFile
ae7a9d
 open Printf
ae7a9d
 
ae7a9d
 open Utils
ae7a9d
diff --git a/src/package_handler.ml b/src/package_handler.ml
ae7a9d
index 0409438..f0d6db3 100644
ae7a9d
--- a/src/package_handler.ml
ae7a9d
+++ b/src/package_handler.ml
ae7a9d
@@ -17,6 +17,7 @@
ae7a9d
  *)
ae7a9d
 
ae7a9d
 open Unix
ae7a9d
+open Unix.LargeFile
ae7a9d
 open Printf
ae7a9d
 
ae7a9d
 open Utils
ae7a9d
diff --git a/src/ph_dpkg.ml b/src/ph_dpkg.ml
ae7a9d
index 1e785de..6d4fce1 100644
ae7a9d
--- a/src/ph_dpkg.ml
ae7a9d
+++ b/src/ph_dpkg.ml
ae7a9d
@@ -17,6 +17,7 @@
ae7a9d
  *)
ae7a9d
 
ae7a9d
 open Unix
ae7a9d
+open Unix.LargeFile
ae7a9d
 open Printf
ae7a9d
 
ae7a9d
 open Utils
ae7a9d
diff --git a/src/ph_pacman.ml b/src/ph_pacman.ml
ae7a9d
index 67f7512..50500a5 100644
ae7a9d
--- a/src/ph_pacman.ml
ae7a9d
+++ b/src/ph_pacman.ml
ae7a9d
@@ -17,6 +17,7 @@
ae7a9d
  *)
ae7a9d
 
ae7a9d
 open Unix
ae7a9d
+open Unix.LargeFile
ae7a9d
 open Printf
ae7a9d
 
ae7a9d
 open Utils
ae7a9d
diff --git a/src/ph_rpm.ml b/src/ph_rpm.ml
ae7a9d
index 9745efd..183b5f3 100644
ae7a9d
--- a/src/ph_rpm.ml
ae7a9d
+++ b/src/ph_rpm.ml
ae7a9d
@@ -17,6 +17,7 @@
ae7a9d
  *)
ae7a9d
 
ae7a9d
 open Unix
ae7a9d
+open Unix.LargeFile
ae7a9d
 open Printf
ae7a9d
 
ae7a9d
 open Utils
ae7a9d
diff --git a/src/supermin.ml b/src/supermin.ml
ae7a9d
index e923111..9f838d9 100644
ae7a9d
--- a/src/supermin.ml
ae7a9d
+++ b/src/supermin.ml
ae7a9d
@@ -17,6 +17,7 @@
ae7a9d
  *)
ae7a9d
 
ae7a9d
 open Unix
ae7a9d
+open Unix.LargeFile
ae7a9d
 open Printf
ae7a9d
 
ae7a9d
 open Types
ae7a9d
diff --git a/src/utils.ml b/src/utils.ml
ae7a9d
index b25df88..f5990ef 100644
ae7a9d
--- a/src/utils.ml
ae7a9d
+++ b/src/utils.ml
ae7a9d
@@ -17,6 +17,7 @@
ae7a9d
  *)
ae7a9d
 
ae7a9d
 open Unix
ae7a9d
+open Unix.LargeFile
ae7a9d
 open Printf
ae7a9d
 
ae7a9d
 let (+^) = Int64.add
ae7a9d
-- 
6de019
2.31.1
ae7a9d