libfdisk chooses a grain of 1MB fairly arbitrarily, and this granule
may not be honored by other utilities. GPT disks formatted elsewhere
may have space before the first partition, AND a partition that exists
solely below 1MB. If this occurs, cfdisk ends up adding a free space
region where end < start, resulting in a 16 Exabyte free region.
That's too many exabytes.
This happens because the start gets rounded up to the granule size in
new_freespace() but the end is left alone. The logs show it best:
23274: libfdisk: CXT: [0x572d878]: initialized: last=34, grain=2048
23274: libfdisk: CXT: [0x572d878]: partno=10, start=64
23274: libfdisk: CXT: [0x572d878]: freespace analyze: partno=10, start=64, end=64
23274: libfdisk: CXT: [0x572d878]: LBA 34 aligned-up 2048 [grain=2048s]
23274: libfdisk: CXT: [0x572d878]: LBA 63 aligned-down 0 [grain=2048s]
23274: libfdisk: CXT: [0x572d878]: LBA 34 aligned-near 0 [grain=2048s]
23274: libfdisk: CXT: [0x572d878]: 0 in range <2048..0> aligned to 2048
23274: libfdisk: PART: [0x574bb98]: alloc
23274: libfdisk: TAB: [0x5749d58]: adding freespace
23274: libfdisk: TAB: [0x5749d58]: insert entry 0x574bb98 pre=0x574a820 [start=2048, end=63, size=18446744073709549632, freespace ]
Avoid this by aligning the last value like new_freespace() does.
Signed-off-by: Evan Green <evangreen86@gmail.com>
Sorry detail-oriented people tend to wipe these out if they notice them.
Add in automated tools and lots of excess end-of-line spaces get wiped
out.
Addresses: https://github.com/karelzak/util-linux/pull/849
Signed-off-by: Karel Zak <kzak@redhat.com>
* current code overwrites hybrid MBR because EE partition
is expected from fist sector, this is not true for hybrid MBR
* print "The partition table has been altered." message also for
nested contexts
* remove "You have to sync the MBR manually" message
Addresses: https://github.com/karelzak/util-linux/issues/851
Signed-off-by: Karel Zak <kzak@redhat.com>
The traditional MBR has pretty well NO limitations on slices. They can
be a single misaligned sector if desired. While this is undesireable
for most real world uses, for the few places they're still used extra
limitations cause breakage not safety.
Signed-off-by: Karel Zak <kzak@redhat.com>
We do not use sector-size from dumps to create partition tables,
because it's always necessary to use real device specific settings.
The new sector-size value is usable when you use the dump as
a description of the device or disk image.
Addresses: https://github.com/karelzak/util-linux/issues/869
Signed-off-by: Karel Zak <kzak@redhat.com>
The current implementation does not allow to move partition for
example in +/-1 sector range, because free space analyze is by default
based on regular grain used for partitioning (=1MiB).
Signed-off-by: Karel Zak <kzak@redhat.com>
The code uses last_sector -= 1 for tiny partitions. This does not make
sense. This stupidity has been introduced by (my) badly commented commit
09a4ca5e45 ... sorry.
Fortunately, this issue is visible only for tiny partitions on large
devices (partitions where size < grain; usual grain is 1MiB) if the last
sector is specified by relative notation (+size{siffix}).
Note that "last -= 1" makes sense when the "last" is align to the
optimal I/O boundary; in this case we need to set the end of the
partition one sector before the boundary. For tiny devices it does not
makes sense as we do not align these partitions.
Addresses: https://github.com/karelzak/util-linux/issues/843
Signed-off-by: Karel Zak <kzak@redhat.com>
The unnamed-field format supports partition type shortcuts:
",1MiB,L'
but for named-field format it requires full type:
(mbr) "size=1MiB,type=83"
(gpt) "size=1MiB,type=0FC63DAF-8483-4772-8E79-3D69D8477DE4"
This patch implements type shortcuts also for named-field format:
"size=1MiB,type=L"
to make it more user-friendly and unified.
Addresses: https://github.com/karelzak/util-linux/issues/837
Signed-off-by: Karel Zak <kzak@redhat.com>
The current libfdisk MBR detection is too weak, the result is that it
reuses MBR from FAT. The correct behavior is to create a new MBR, wipe
first sector (on write) and warn about obsolete FAT superblock.
Reported-by: Mike Fleetwood <mike.fleetwood@googlemail.com>
Signed-off-by: Karel Zak <kzak@redhat.com>
It's possible that caller has the device already opened for some
other task, so let's reuse the file descriptor.
Requested-by: Lennart Poettering <lennart@poettering.net>
Signed-off-by: Karel Zak <kzak@redhat.com>
This small change improves possibility to modify by script described
PT and use script API in another tools as primary way to create
partitions.
All you need is to compose script by fdisk_script_set_header() and
fdisk_script_set_table() and than apply by fdisk_apply_script().
Requested-by: Lennart Poettering <lennart@poettering.net>
Signed-off-by: Karel Zak <kzak@redhat.com>
The self_pte() can return NULL if partitions array is not large enough,
but that should also be impossible and definitely a bug.
libfdisk/src/dos.c:984:8: warning: potential null pointer dereference [-Wnull-dereference]
libfdisk/src/dos.c:1031:8: warning: potential null pointer dereference [-Wnull-dereference]
Signed-off-by: Sami Kerola <kerolasa@iki.fi>
Let's keep compilers and static analyzers happy. The idea is to use
memcpy() to copy from buffer to variable and use all label as unsigned
char rather than vectorize by unsigned short.
Signed-off-by: Karel Zak <kzak@redhat.com>
Parsing of the label-id fails on 32-bit if the MSB is set. Fix that by
using strtoul instead of strtol.
Signed-off-by: Juerg Haefliger <juergh@canonical.com>
The current code uses first[] and last[] arrays to specify partition
ranges. This is unnecessary as we already have all in memory.
The current code offers in first and last sector dialogs ranges
without care about already used areas.
This commit makes things more readable, more user-friendly and
remove obscure first[] and last[].
Reported-by: 冰柯 <ziming_cool@126.com
Signed-off-by: Karel Zak <kzak@redhat.com>
This change fixes "warning: variable 'var' may be uninitialized when used
here [-Wconditional-uninitialized]" warnings reported in various files.
Signed-off-by: Sami Kerola <kerolasa@iki.fi>
The HiFive Unleashed SBC's bootloader seeks for GPT partitions with
specific UUID for loading the next stage bootloader (ZSBL loads FSBL,
and FSBL loads BBL).
Add these partition type UUIDs.
Signed-off-by: Icenowy Zheng <icenowy@aosc.io>
* report failed partition type parsing
* make sure partition types code (from user reply) for MBR is hex
Reported-by: Jonny Grant <jg@jguk.org>
Signed-off-by: Karel Zak <kzak@redhat.com>
libfdisk/src/script.c: In function ‘fdisk_script_read_context’:
libfdisk/src/script.c:452:33: error: format ‘%zu’ expects argument of type ‘size_t’, but argument 4 has type ‘long unsigned int’ [-Werror=format=]
snprintf(buf, sizeof(buf), "%zu", fdisk_get_grain_size(cxt));
^
Signed-off-by: Ruediger Meier <ruediger.meier@ga-group.nl>