]> git.ipfire.org Git - thirdparty/xfsprogs-dev.git/commitdiff
libxfs: fix krealloc to allow freeing data
authorDarrick J. Wong <djwong@kernel.org>
Fri, 12 Jan 2024 02:07:03 +0000 (18:07 -0800)
committerDarrick J. Wong <djwong@kernel.org>
Fri, 12 Jan 2024 02:07:03 +0000 (18:07 -0800)
A recent refactoring to xfs_idata_realloc in the kernel made it depend
on krealloc returning NULL if the new size is zero.  The xfsprogs
wrapper instead aborts, so we need to make it follow the kernel
behavior.

Signed-off-by: Darrick J. Wong <djwong@kernel.org>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Carlos Maiolino <cmaiolino@redhat.com>
libxfs/kmem.c

index 42d813088d6ada92842f5ce0fd3c6a5fb9533cd9..c264be018bdc09d558aa78d39c92c24c405349c1 100644 (file)
@@ -98,6 +98,16 @@ kmem_zalloc(size_t size, int flags)
 void *
 krealloc(void *ptr, size_t new_size, int flags)
 {
+       /*
+        * If @new_size is zero, Linux krealloc will free the memory and return
+        * NULL, so force that behavior here.  The return value of realloc with
+        * a zero size is implementation dependent, so we cannot use that.
+        */
+       if (!new_size) {
+               free(ptr);
+               return NULL;
+       }
+
        ptr = realloc(ptr, new_size);
        if (ptr == NULL) {
                fprintf(stderr, _("%s: realloc failed (%d bytes): %s\n"),