Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 07 Jan 2021 09:25:28 +0000
From:      bugzilla-noreply@freebsd.org
To:        bugs@FreeBSD.org
Subject:   [Bug 252488] bsdtar fails to work with 128k blocksize
Message-ID:  <bug-252488-227@https.bugs.freebsd.org/bugzilla/>

next in thread | raw e-mail | index | archive | help
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=3D252488

            Bug ID: 252488
           Summary: bsdtar fails to work with 128k blocksize
           Product: Base System
           Version: 11.4-STABLE
          Hardware: Any
                OS: Any
            Status: New
          Severity: Affects Some People
          Priority: ---
         Component: bin
          Assignee: bugs@FreeBSD.org
          Reporter: mail@fbsd2.e4m.org

Prerequisites: tape written with 128k block size, mt blocksize 131072

bsdtar -tf /dev/sa0 -b 256

gives

sa0: request ptr 0x2888ed80 is not on a page boundary; cannot split request
bsdtar: Error opening archive: Error reading '/dev/sa0'

This seems to be an alignment problem. The problem goes away after aligning
the buffer in archive_read_open_filename.c:

--- archive_read_open_filename.c.ORI   2020-03-13 08:22:53.000000000 +0100
+++ archive_read_open_filename.c       2021-01-06 10:37:34.176333000 +0100
@@ -359,12 +359,17 @@
                        new_block_size *=3D 2;
                mine->block_size =3D new_block_size;
        }
+#if 0
        buffer =3D malloc(mine->block_size);
+#else
+       buffer =3D malloc(mine->block_size + 4096);
+#endif
        if (buffer =3D=3D NULL) {
                archive_set_error(a, ENOMEM, "No memory");
                goto fail;
        }
        mine->buffer =3D buffer;
+       mine->buffer =3D (void*)(((u_int32_t)buffer + 4096) & ~4095);
        mine->fd =3D fd;
        /* Remember mode so close can decide whether to flush. */
        mine->st_mode =3D st.st_mode;


This is NO patch to fix the issue -- it's just to show the origin of the
problem . A proper patch will probably use PAGESIZE and distinguish between
malloc start and aligned buffer (so it can bee free()ed).

--=20
You are receiving this mail because:
You are the assignee for the bug.=



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?bug-252488-227>