2.26.1-1: upgrade and fix sfdisk bugs
This commit is contained in:
parent
eab90e03d7
commit
3fe05ecbfc
1
.gitignore
vendored
1
.gitignore
vendored
@ -40,3 +40,4 @@
|
|||||||
/util-linux-2.26-rc1.tar.xz
|
/util-linux-2.26-rc1.tar.xz
|
||||||
/util-linux-2.26-rc2.tar.xz
|
/util-linux-2.26-rc2.tar.xz
|
||||||
/util-linux-2.26.tar.xz
|
/util-linux-2.26.tar.xz
|
||||||
|
/util-linux-2.26.1.tar.xz
|
||||||
|
@ -0,0 +1,62 @@
|
|||||||
|
From 376484140cb7ef117616ac2880bd8ec18381b18f Mon Sep 17 00:00:00 2001
|
||||||
|
From: Karel Zak <kzak@redhat.com>
|
||||||
|
Date: Mon, 13 Apr 2015 10:29:00 +0200
|
||||||
|
Subject: [PATCH 2/5] libfdisk: (dos) retain existing boot flag when resizing
|
||||||
|
a partition
|
||||||
|
|
||||||
|
Addresses: https://bugzilla.redhat.com/show_bug.cgi?id=1210912
|
||||||
|
Signed-off-by: Karel Zak <kzak@redhat.com>
|
||||||
|
Co-Author: awilliam@redhat.com
|
||||||
|
---
|
||||||
|
libfdisk/src/dos.c | 8 +++++---
|
||||||
|
libfdisk/src/partition.c | 3 +--
|
||||||
|
2 files changed, 6 insertions(+), 5 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/libfdisk/src/dos.c b/libfdisk/src/dos.c
|
||||||
|
index dce9829..6468071 100644
|
||||||
|
--- a/libfdisk/src/dos.c
|
||||||
|
+++ b/libfdisk/src/dos.c
|
||||||
|
@@ -1221,7 +1221,7 @@ static int add_partition(struct fdisk_context *cxt, size_t n,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- set_partition(cxt, n, 0, start, stop, sys, pa && pa->boot == 1 ? 1 : 0);
|
||||||
|
+ set_partition(cxt, n, 0, start, stop, sys, fdisk_partition_is_bootable(pa));
|
||||||
|
if (n > 4) {
|
||||||
|
struct pte *pe = self_pte(cxt, n);
|
||||||
|
set_partition(cxt, n - 1, 1, pe->offset, stop,
|
||||||
|
@@ -1963,13 +1963,15 @@ static int dos_set_partition(struct fdisk_context *cxt, size_t n,
|
||||||
|
|
||||||
|
set_partition(cxt, n, 0, start, start + size - 1,
|
||||||
|
pa->type ? pa->type->code : p->sys_ind,
|
||||||
|
- pa->boot == 1);
|
||||||
|
+ FDISK_IS_UNDEF(pa->boot) ?
|
||||||
|
+ p->boot_ind == ACTIVE_FLAG :
|
||||||
|
+ fdisk_partition_is_bootable(pa));
|
||||||
|
} else {
|
||||||
|
DBG(LABEL, ul_debug("DOS: keep size, modify properties"));
|
||||||
|
if (pa->type)
|
||||||
|
p->sys_ind = pa->type->code;
|
||||||
|
if (!FDISK_IS_UNDEF(pa->boot))
|
||||||
|
- p->boot_ind = pa->boot == 1 ? ACTIVE_FLAG : 0;
|
||||||
|
+ p->boot_ind = fdisk_partition_is_bootable(pa) ? ACTIVE_FLAG : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
partition_set_changed(cxt, n, 1);
|
||||||
|
diff --git a/libfdisk/src/partition.c b/libfdisk/src/partition.c
|
||||||
|
index 03c0eb5..a0b9ca5 100644
|
||||||
|
--- a/libfdisk/src/partition.c
|
||||||
|
+++ b/libfdisk/src/partition.c
|
||||||
|
@@ -757,8 +757,7 @@ int fdisk_partition_to_string(struct fdisk_partition *pa,
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case FDISK_FIELD_BOOT:
|
||||||
|
- if (fdisk_partition_is_bootable(pa))
|
||||||
|
- rc = asprintf(&p, "%c", pa->boot ? '*' : ' ');
|
||||||
|
+ p = fdisk_partition_is_bootable(pa) ? strdup("*") : NULL;
|
||||||
|
break;
|
||||||
|
case FDISK_FIELD_START:
|
||||||
|
if (fdisk_partition_has_start(pa)) {
|
||||||
|
--
|
||||||
|
2.1.0
|
||||||
|
|
41
2.27-libfdisk-fix-symbols-versioning-script.patch
Normal file
41
2.27-libfdisk-fix-symbols-versioning-script.patch
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
From 6ece2f94849d5c61920d435804fb72b59503686f Mon Sep 17 00:00:00 2001
|
||||||
|
From: Karel Zak <kzak@redhat.com>
|
||||||
|
Date: Wed, 25 Mar 2015 11:08:22 +0100
|
||||||
|
Subject: [PATCH 1/5] libfdisk: fix symbols versioning script
|
||||||
|
|
||||||
|
Really stupid copy & past mistake. The libfdisk symbols should not be
|
||||||
|
prefixed by MOUNT_ suffix.
|
||||||
|
|
||||||
|
This change makes binaries linked with libfdisk 2.26 incompatible with
|
||||||
|
new libfdisk. Fortunately, 2.26 has been the first release and very
|
||||||
|
probably the library has been used for util-linux fdisks only.
|
||||||
|
|
||||||
|
Signed-off-by: Karel Zak <kzak@redhat.com>
|
||||||
|
---
|
||||||
|
libfdisk/src/libfdisk.sym | 9 +++++----
|
||||||
|
1 file changed, 5 insertions(+), 4 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/libfdisk/src/libfdisk.sym b/libfdisk/src/libfdisk.sym
|
||||||
|
index 8364fe7..541b247 100644
|
||||||
|
--- a/libfdisk/src/libfdisk.sym
|
||||||
|
+++ b/libfdisk/src/libfdisk.sym
|
||||||
|
@@ -1,11 +1,12 @@
|
||||||
|
/*
|
||||||
|
* The symbol versioning ensures that a new application requiring symbol foo;
|
||||||
|
- * can't run with old libblkid.so not providing foo;
|
||||||
|
- * version info can't enforce this since we never change the SONAME.
|
||||||
|
+ * can't run with old library.so not providing foo.
|
||||||
|
+
|
||||||
|
+ * Version info can't enforce this since we never change the SONAME.
|
||||||
|
*
|
||||||
|
- * Copyright (C) 2014 Karel Zak <kzak@redhat.com>
|
||||||
|
+ * Copyright (C) 2014-2015 Karel Zak <kzak@redhat.com>
|
||||||
|
*/
|
||||||
|
-MOUNT_2.26 {
|
||||||
|
+FDISK_2.26 {
|
||||||
|
global:
|
||||||
|
fdisk_add_partition;
|
||||||
|
fdisk_align_lba;
|
||||||
|
--
|
||||||
|
2.1.0
|
||||||
|
|
357
2.27-libfdisk-support-bootbits-protection-from-p-MBR.patch
Normal file
357
2.27-libfdisk-support-bootbits-protection-from-p-MBR.patch
Normal file
@ -0,0 +1,357 @@
|
|||||||
|
From 4bcc9fdca681b48c54954924608b8c337d61fbad Mon Sep 17 00:00:00 2001
|
||||||
|
From: Karel Zak <kzak@redhat.com>
|
||||||
|
Date: Mon, 13 Apr 2015 13:40:25 +0200
|
||||||
|
Subject: [PATCH 4/5] libfdisk: support bootbits protection from (p)MBR
|
||||||
|
|
||||||
|
Signed-off-by: Karel Zak <kzak@redhat.com>
|
||||||
|
---
|
||||||
|
include/pt-mbr.h | 1 +
|
||||||
|
libfdisk/docs/libfdisk-sections.txt | 6 ++-
|
||||||
|
libfdisk/src/context.c | 33 ++++++++++++++++-
|
||||||
|
libfdisk/src/dos.c | 5 ++-
|
||||||
|
libfdisk/src/fdiskP.h | 4 +-
|
||||||
|
libfdisk/src/gpt.c | 6 ++-
|
||||||
|
libfdisk/src/libfdisk.h.in | 2 +
|
||||||
|
libfdisk/src/libfdisk.sym | 5 +++
|
||||||
|
libfdisk/src/sgi.c | 2 +-
|
||||||
|
libfdisk/src/sun.c | 2 +-
|
||||||
|
libfdisk/src/utils.c | 73 ++++++++++++++++++++++++++-----------
|
||||||
|
11 files changed, 109 insertions(+), 30 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/include/pt-mbr.h b/include/pt-mbr.h
|
||||||
|
index 1279e3c..6957b95 100644
|
||||||
|
--- a/include/pt-mbr.h
|
||||||
|
+++ b/include/pt-mbr.h
|
||||||
|
@@ -11,6 +11,7 @@ struct dos_partition {
|
||||||
|
} __attribute__((packed));
|
||||||
|
|
||||||
|
#define MBR_PT_OFFSET 0x1be
|
||||||
|
+#define MBR_PT_BOOTBITS_SIZE 440
|
||||||
|
|
||||||
|
static inline struct dos_partition *mbr_get_partition(unsigned char *mbr, int i)
|
||||||
|
{
|
||||||
|
diff --git a/libfdisk/docs/libfdisk-sections.txt b/libfdisk/docs/libfdisk-sections.txt
|
||||||
|
index 676d500..2d5cd92 100644
|
||||||
|
--- a/libfdisk/docs/libfdisk-sections.txt
|
||||||
|
+++ b/libfdisk/docs/libfdisk-sections.txt
|
||||||
|
@@ -279,6 +279,7 @@ fdisk_unref_table
|
||||||
|
fdisk_context
|
||||||
|
fdisk_assign_device
|
||||||
|
fdisk_deassign_device
|
||||||
|
+fdisk_enable_bootbits_protection
|
||||||
|
fdisk_enable_details
|
||||||
|
fdisk_enable_listonly
|
||||||
|
fdisk_get_alignment_offset
|
||||||
|
@@ -297,22 +298,23 @@ fdisk_get_parent
|
||||||
|
fdisk_get_physector_size
|
||||||
|
fdisk_get_sector_size
|
||||||
|
fdisk_get_size_unit
|
||||||
|
-FDISK_PLURAL
|
||||||
|
-FDISK_SINGULAR
|
||||||
|
fdisk_get_unit
|
||||||
|
fdisk_get_units_per_sector
|
||||||
|
fdisk_has_label
|
||||||
|
+fdisk_has_protected_bootbits
|
||||||
|
fdisk_is_details
|
||||||
|
fdisk_is_labeltype
|
||||||
|
fdisk_is_listonly
|
||||||
|
fdisk_is_readonly
|
||||||
|
fdisk_new_context
|
||||||
|
fdisk_new_nested_context
|
||||||
|
+FDISK_PLURAL
|
||||||
|
fdisk_ref_context
|
||||||
|
fdisk_set_first_lba
|
||||||
|
fdisk_set_last_lba
|
||||||
|
fdisk_set_size_unit
|
||||||
|
fdisk_set_unit
|
||||||
|
+FDISK_SINGULAR
|
||||||
|
fdisk_unref_context
|
||||||
|
fdisk_use_cylinders
|
||||||
|
</SECTION>
|
||||||
|
diff --git a/libfdisk/src/context.c b/libfdisk/src/context.c
|
||||||
|
index 84867b0..efc961c 100644
|
||||||
|
--- a/libfdisk/src/context.c
|
||||||
|
+++ b/libfdisk/src/context.c
|
||||||
|
@@ -94,12 +94,13 @@ static int init_nested_from_parent(struct fdisk_context *cxt, int isnew)
|
||||||
|
cxt->user_log_sector = parent->user_log_sector;
|
||||||
|
cxt->user_pyh_sector = parent->user_pyh_sector;
|
||||||
|
|
||||||
|
- /* parent <--> nested independent setting, initialize for new nested
|
||||||
|
+ /* parent <--> nested independent setting, initialize for new nested
|
||||||
|
* contexts only */
|
||||||
|
if (isnew) {
|
||||||
|
cxt->listonly = parent->listonly;
|
||||||
|
cxt->display_details = parent->display_details;
|
||||||
|
cxt->display_in_cyl_units = parent->display_in_cyl_units;
|
||||||
|
+ cxt->protect_bootbits = parent->protect_bootbits;
|
||||||
|
}
|
||||||
|
|
||||||
|
free(cxt->dev_path);
|
||||||
|
@@ -304,6 +305,36 @@ int fdisk_has_label(struct fdisk_context *cxt)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
+ * fdisk_has_protected_bootbits:
|
||||||
|
+ * @cxt: fdisk context
|
||||||
|
+ *
|
||||||
|
+ * Returns: return 1 if boot bits protection enabled.
|
||||||
|
+ */
|
||||||
|
+int fdisk_has_protected_bootbits(struct fdisk_context *cxt)
|
||||||
|
+{
|
||||||
|
+ return cxt && cxt->protect_bootbits;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+/**
|
||||||
|
+ * fdisk_enable_bootbits_protection:
|
||||||
|
+ * @cxt: fdisk context
|
||||||
|
+ * @enable: 1 or 0
|
||||||
|
+ *
|
||||||
|
+ * The library zeroizes all the first sector when create a new disk label by
|
||||||
|
+ * default. This function allows to control this behavior. For now it's
|
||||||
|
+ * supported for MBR and GPT.
|
||||||
|
+ *
|
||||||
|
+ * Returns: 0 on success, < 0 on error.
|
||||||
|
+ */
|
||||||
|
+int fdisk_enable_bootbits_protection(struct fdisk_context *cxt, int enable)
|
||||||
|
+{
|
||||||
|
+ if (!cxt)
|
||||||
|
+ return -EINVAL;
|
||||||
|
+ cxt->protect_bootbits = enable ? 1 : 0;
|
||||||
|
+ return 0;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+/**
|
||||||
|
* fdisk_get_npartitions:
|
||||||
|
* @cxt: context
|
||||||
|
*
|
||||||
|
diff --git a/libfdisk/src/dos.c b/libfdisk/src/dos.c
|
||||||
|
index 6468071..f2308e3 100644
|
||||||
|
--- a/libfdisk/src/dos.c
|
||||||
|
+++ b/libfdisk/src/dos.c
|
||||||
|
@@ -659,7 +659,10 @@ static int dos_create_disklabel(struct fdisk_context *cxt)
|
||||||
|
if (!has_id)
|
||||||
|
random_get_bytes(&id, sizeof(id));
|
||||||
|
|
||||||
|
- rc = fdisk_init_firstsector_buffer(cxt);
|
||||||
|
+ if (fdisk_has_protected_bootbits(cxt))
|
||||||
|
+ rc = fdisk_init_firstsector_buffer(cxt, 0, MBR_PT_BOOTBITS_SIZE);
|
||||||
|
+ else
|
||||||
|
+ rc = fdisk_init_firstsector_buffer(cxt, 0, 0);
|
||||||
|
if (rc)
|
||||||
|
return rc;
|
||||||
|
dos_init(cxt);
|
||||||
|
diff --git a/libfdisk/src/fdiskP.h b/libfdisk/src/fdiskP.h
|
||||||
|
index dc561f3..0ca498d 100644
|
||||||
|
--- a/libfdisk/src/fdiskP.h
|
||||||
|
+++ b/libfdisk/src/fdiskP.h
|
||||||
|
@@ -350,6 +350,7 @@ struct fdisk_context {
|
||||||
|
unsigned int readonly : 1, /* don't write to the device */
|
||||||
|
display_in_cyl_units : 1, /* for obscure labels */
|
||||||
|
display_details : 1, /* expert display mode */
|
||||||
|
+ protect_bootbits : 1, /* don't zeroize fll irst sector */
|
||||||
|
listonly : 1; /* list partition, nothing else */
|
||||||
|
|
||||||
|
int sizeunit; /* SIZE fields, FDISK_SIZEUNIT_* */
|
||||||
|
@@ -402,7 +403,8 @@ extern int fdisk_apply_user_device_properties(struct fdisk_context *cxt);
|
||||||
|
extern void fdisk_zeroize_device_properties(struct fdisk_context *cxt);
|
||||||
|
|
||||||
|
/* utils.c */
|
||||||
|
-extern int fdisk_init_firstsector_buffer(struct fdisk_context *cxt);
|
||||||
|
+extern int fdisk_init_firstsector_buffer(struct fdisk_context *cxt,
|
||||||
|
+ unsigned int protect_off, unsigned int protect_size);
|
||||||
|
extern int fdisk_read_firstsector(struct fdisk_context *cxt);
|
||||||
|
extern char *fdisk_partname(const char *dev, size_t partno);
|
||||||
|
|
||||||
|
diff --git a/libfdisk/src/gpt.c b/libfdisk/src/gpt.c
|
||||||
|
index 61b0a32..22e2d16 100644
|
||||||
|
--- a/libfdisk/src/gpt.c
|
||||||
|
+++ b/libfdisk/src/gpt.c
|
||||||
|
@@ -27,6 +27,7 @@
|
||||||
|
#include "bitops.h"
|
||||||
|
#include "strutils.h"
|
||||||
|
#include "all-io.h"
|
||||||
|
+#include "pt-mbr.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* SECTION: gpt
|
||||||
|
@@ -406,7 +407,10 @@ static int gpt_mknew_pmbr(struct fdisk_context *cxt)
|
||||||
|
if (!cxt || !cxt->firstsector)
|
||||||
|
return -ENOSYS;
|
||||||
|
|
||||||
|
- rc = fdisk_init_firstsector_buffer(cxt);
|
||||||
|
+ if (fdisk_has_protected_bootbits(cxt))
|
||||||
|
+ rc = fdisk_init_firstsector_buffer(cxt, 0, MBR_PT_BOOTBITS_SIZE);
|
||||||
|
+ else
|
||||||
|
+ rc = fdisk_init_firstsector_buffer(cxt, 0, 0);
|
||||||
|
if (rc)
|
||||||
|
return rc;
|
||||||
|
|
||||||
|
diff --git a/libfdisk/src/libfdisk.h.in b/libfdisk/src/libfdisk.h.in
|
||||||
|
index 3aeef1e..78c0728 100644
|
||||||
|
--- a/libfdisk/src/libfdisk.h.in
|
||||||
|
+++ b/libfdisk/src/libfdisk.h.in
|
||||||
|
@@ -211,6 +211,8 @@ enum {
|
||||||
|
int fdisk_set_size_unit(struct fdisk_context *cxt, int unit);
|
||||||
|
int fdisk_get_size_unit(struct fdisk_context *cxt);
|
||||||
|
|
||||||
|
+int fdisk_has_protected_bootbits(struct fdisk_context *cxt);
|
||||||
|
+int fdisk_enable_bootbits_protection(struct fdisk_context *cxt, int enable);
|
||||||
|
|
||||||
|
/* parttype.c */
|
||||||
|
struct fdisk_parttype *fdisk_new_parttype(void);
|
||||||
|
diff --git a/libfdisk/src/libfdisk.sym b/libfdisk/src/libfdisk.sym
|
||||||
|
index 541b247..9f720ff 100644
|
||||||
|
--- a/libfdisk/src/libfdisk.sym
|
||||||
|
+++ b/libfdisk/src/libfdisk.sym
|
||||||
|
@@ -239,3 +239,8 @@ global:
|
||||||
|
local:
|
||||||
|
*;
|
||||||
|
};
|
||||||
|
+
|
||||||
|
+FDISK_2.27 {
|
||||||
|
+ fdisk_enable_bootbits_protection;
|
||||||
|
+ fdisk_has_protected_bootbits;
|
||||||
|
+} FDISK_2.26;
|
||||||
|
diff --git a/libfdisk/src/sgi.c b/libfdisk/src/sgi.c
|
||||||
|
index cd4cedf..7cc68b5 100644
|
||||||
|
--- a/libfdisk/src/sgi.c
|
||||||
|
+++ b/libfdisk/src/sgi.c
|
||||||
|
@@ -965,7 +965,7 @@ static int sgi_create_disklabel(struct fdisk_context *cxt)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
- rc = fdisk_init_firstsector_buffer(cxt);
|
||||||
|
+ rc = fdisk_init_firstsector_buffer(cxt, 0, 0);
|
||||||
|
if (rc)
|
||||||
|
return rc;
|
||||||
|
|
||||||
|
diff --git a/libfdisk/src/sun.c b/libfdisk/src/sun.c
|
||||||
|
index d99c39f..27e3bdd 100644
|
||||||
|
--- a/libfdisk/src/sun.c
|
||||||
|
+++ b/libfdisk/src/sun.c
|
||||||
|
@@ -209,7 +209,7 @@ static int sun_create_disklabel(struct fdisk_context *cxt)
|
||||||
|
assert(fdisk_is_label(cxt, SUN));
|
||||||
|
|
||||||
|
/* map first sector to header */
|
||||||
|
- rc = fdisk_init_firstsector_buffer(cxt);
|
||||||
|
+ rc = fdisk_init_firstsector_buffer(cxt, 0, 0);
|
||||||
|
if (rc)
|
||||||
|
return rc;
|
||||||
|
|
||||||
|
diff --git a/libfdisk/src/utils.c b/libfdisk/src/utils.c
|
||||||
|
index 482a306..cc470d9 100644
|
||||||
|
--- a/libfdisk/src/utils.c
|
||||||
|
+++ b/libfdisk/src/utils.c
|
||||||
|
@@ -10,14 +10,49 @@
|
||||||
|
* @short_description: misc fdisk functions
|
||||||
|
*/
|
||||||
|
|
||||||
|
+static int read_from_device(struct fdisk_context *cxt,
|
||||||
|
+ unsigned char *buf,
|
||||||
|
+ uintmax_t start, size_t size)
|
||||||
|
+{
|
||||||
|
+ ssize_t r;
|
||||||
|
+
|
||||||
|
+ assert(cxt);
|
||||||
|
+
|
||||||
|
+ DBG(CXT, ul_debugobj(cxt, "reading: offset=%ju, size=%zu",
|
||||||
|
+ start, size));
|
||||||
|
+
|
||||||
|
+ r = lseek(cxt->dev_fd, start, SEEK_SET);
|
||||||
|
+ if (r == -1)
|
||||||
|
+ {
|
||||||
|
+ DBG(CXT, ul_debugobj(cxt, "failed to seek to offset %ju: %m", start));
|
||||||
|
+ return -errno;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ r = read(cxt->dev_fd, buf, size);
|
||||||
|
+ if (r < 0 || r != size) {
|
||||||
|
+ if (!errno)
|
||||||
|
+ errno = EINVAL; /* probably too small file/device */
|
||||||
|
+ DBG(CXT, ul_debugobj(cxt, "failed to read %zu from offset %ju: %m",
|
||||||
|
+ size, start));
|
||||||
|
+ return -errno;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ return 0;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+
|
||||||
|
/*
|
||||||
|
* Zeros in-memory first sector buffer
|
||||||
|
*/
|
||||||
|
-int fdisk_init_firstsector_buffer(struct fdisk_context *cxt)
|
||||||
|
+int fdisk_init_firstsector_buffer(struct fdisk_context *cxt,
|
||||||
|
+ unsigned int protect_off,
|
||||||
|
+ unsigned int protect_size)
|
||||||
|
{
|
||||||
|
if (!cxt)
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
|
+ assert(protect_off + protect_size <= cxt->sector_size);
|
||||||
|
+
|
||||||
|
if (!cxt->firstsector || cxt->firstsector_bufsz != cxt->sector_size) {
|
||||||
|
/* Let's allocate a new buffer if no allocated yet, or the
|
||||||
|
* current buffer has incorrect size */
|
||||||
|
@@ -36,43 +71,37 @@ int fdisk_init_firstsector_buffer(struct fdisk_context *cxt)
|
||||||
|
|
||||||
|
DBG(CXT, ul_debugobj(cxt, "zeroize in-memory first sector buffer"));
|
||||||
|
memset(cxt->firstsector, 0, cxt->firstsector_bufsz);
|
||||||
|
+
|
||||||
|
+ if (protect_size) {
|
||||||
|
+ /*
|
||||||
|
+ * It would be possible to reuse data from cxt->firstsector
|
||||||
|
+ * (call memset() for non-protected area only) and avoid one
|
||||||
|
+ * read() from the device, but it seems like a too fragile
|
||||||
|
+ * solution as we have no clue about stuff in the buffer --
|
||||||
|
+ * maybe it was already modified. Let's re-read from the device
|
||||||
|
+ * to be sure. -- kzak 13-Apr-2015
|
||||||
|
+ */
|
||||||
|
+ DBG(CXT, ul_debugobj(cxt, "first sector protection enabled -- re-reading"));
|
||||||
|
+ read_from_device(cxt, cxt->firstsector, protect_off, protect_size);
|
||||||
|
+ }
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int fdisk_read_firstsector(struct fdisk_context *cxt)
|
||||||
|
{
|
||||||
|
- ssize_t r;
|
||||||
|
int rc;
|
||||||
|
|
||||||
|
assert(cxt);
|
||||||
|
assert(cxt->sector_size);
|
||||||
|
|
||||||
|
- rc = fdisk_init_firstsector_buffer(cxt);
|
||||||
|
+ rc = fdisk_init_firstsector_buffer(cxt, 0, 0);
|
||||||
|
if (rc)
|
||||||
|
return rc;
|
||||||
|
|
||||||
|
assert(cxt->sector_size == cxt->firstsector_bufsz);
|
||||||
|
|
||||||
|
- DBG(CXT, ul_debugobj(cxt, "reading first sector "
|
||||||
|
- "buffer [sector_size=%lu]", cxt->sector_size));
|
||||||
|
-
|
||||||
|
- r = lseek(cxt->dev_fd, 0, SEEK_SET);
|
||||||
|
- if (r == -1)
|
||||||
|
- {
|
||||||
|
- DBG(CXT, ul_debugobj(cxt, "failed to seek to first sector %m"));
|
||||||
|
- return -errno;
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- r = read(cxt->dev_fd, cxt->firstsector, cxt->sector_size);
|
||||||
|
|
||||||
|
- if (r != cxt->sector_size) {
|
||||||
|
- if (!errno)
|
||||||
|
- errno = EINVAL; /* probably too small file/device */
|
||||||
|
- DBG(CXT, ul_debugobj(cxt, "failed to read first sector %m"));
|
||||||
|
- return -errno;
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- return 0;
|
||||||
|
+ return read_from_device(cxt, cxt->firstsector, 0, cxt->sector_size);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
--
|
||||||
|
2.1.0
|
||||||
|
|
26
2.27-sfdisk-enable-bootbits-protection.patch
Normal file
26
2.27-sfdisk-enable-bootbits-protection.patch
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
From 67414f247ef7a3177c1349de7e18fbfe7ad5f904 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Karel Zak <kzak@redhat.com>
|
||||||
|
Date: Mon, 13 Apr 2015 13:41:10 +0200
|
||||||
|
Subject: [PATCH 5/5] sfdisk: enable bootbits protection
|
||||||
|
|
||||||
|
Addresses: https://bugzilla.redhat.com/show_bug.cgi?id=1210428
|
||||||
|
Signed-off-by: Karel Zak <kzak@redhat.com>
|
||||||
|
---
|
||||||
|
disk-utils/sfdisk.c | 1 +
|
||||||
|
1 file changed, 1 insertion(+)
|
||||||
|
|
||||||
|
diff --git a/disk-utils/sfdisk.c b/disk-utils/sfdisk.c
|
||||||
|
index 8846df8..dcdae33 100644
|
||||||
|
--- a/disk-utils/sfdisk.c
|
||||||
|
+++ b/disk-utils/sfdisk.c
|
||||||
|
@@ -190,6 +190,7 @@ static void sfdisk_init(struct sfdisk *sf)
|
||||||
|
if (!sf->cxt)
|
||||||
|
err(EXIT_FAILURE, _("failed to allocate libfdisk context"));
|
||||||
|
fdisk_set_ask(sf->cxt, ask_callback, (void *) sf);
|
||||||
|
+ fdisk_enable_bootbits_protection(sf->cxt, 1);
|
||||||
|
|
||||||
|
if (sf->label_nested) {
|
||||||
|
struct fdisk_context *x = fdisk_new_nested_context(sf->cxt,
|
||||||
|
--
|
||||||
|
2.1.0
|
||||||
|
|
62
2.27-sfdisk-improve-N-warnings.patch
Normal file
62
2.27-sfdisk-improve-N-warnings.patch
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
From 3275c1ac6d28c2257eb031277510bc9da99deedd Mon Sep 17 00:00:00 2001
|
||||||
|
From: Karel Zak <kzak@redhat.com>
|
||||||
|
Date: Mon, 13 Apr 2015 12:08:50 +0200
|
||||||
|
Subject: [PATCH 3/5] sfdisk: improve -N warnings
|
||||||
|
|
||||||
|
Signed-off-by: Karel Zak <kzak@redhat.com>
|
||||||
|
---
|
||||||
|
disk-utils/sfdisk.8 | 9 ++++++++-
|
||||||
|
disk-utils/sfdisk.c | 9 +++++++--
|
||||||
|
2 files changed, 15 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/disk-utils/sfdisk.8 b/disk-utils/sfdisk.8
|
||||||
|
index 66a8f99..0d63b6b 100644
|
||||||
|
--- a/disk-utils/sfdisk.8
|
||||||
|
+++ b/disk-utils/sfdisk.8
|
||||||
|
@@ -57,7 +57,14 @@ input format. If standard input is a terminal, then \fBsfdisk\fR starts an
|
||||||
|
interactive session.
|
||||||
|
.sp
|
||||||
|
If the option \fB\-N\fR is specified, then the changes are applied to
|
||||||
|
-the partition addressed by \fIpartition-number\fR.
|
||||||
|
+the partition addressed by \fIpartition-number\fR. The unspecified fields
|
||||||
|
+of the partition are not modified.
|
||||||
|
+.sp
|
||||||
|
+Note that it's possible to address unused partition by \fB\-N\fR. For example
|
||||||
|
+MBR always contains 4 partitions, but the number of the used partitions may be
|
||||||
|
+smaller. In this case sfdisk follows the default values from the partition
|
||||||
|
+table and it does not use built-in defaults for the unused partition specified
|
||||||
|
+by \fB\-N\fR. See also \fB\---append\fR.
|
||||||
|
.TP
|
||||||
|
.BR \-a , " \-\-activate \fIdevice\fR [" \fIpartition-number\fR...]
|
||||||
|
Switch on the bootable flag. If no \fIpartition-number\fR is specified,
|
||||||
|
diff --git a/disk-utils/sfdisk.c b/disk-utils/sfdisk.c
|
||||||
|
index 2e89d94..8846df8 100644
|
||||||
|
--- a/disk-utils/sfdisk.c
|
||||||
|
+++ b/disk-utils/sfdisk.c
|
||||||
|
@@ -1109,16 +1109,21 @@ static int command_fdisk(struct sfdisk *sf, int argc, char **argv)
|
||||||
|
*/
|
||||||
|
if (partno >= 0) {
|
||||||
|
size_t n;
|
||||||
|
+
|
||||||
|
if (!fdisk_has_label(sf->cxt))
|
||||||
|
errx(EXIT_FAILURE, _("%s: cannot modify partition %d: "
|
||||||
|
"no partition table was found"),
|
||||||
|
- devname, partno);
|
||||||
|
+ devname, partno + 1);
|
||||||
|
n = fdisk_get_npartitions(sf->cxt);
|
||||||
|
if ((size_t) partno > n)
|
||||||
|
errx(EXIT_FAILURE, _("%s: cannot modify partition %d: "
|
||||||
|
"partition table contains only %zu "
|
||||||
|
"partitions"),
|
||||||
|
- devname, partno, n);
|
||||||
|
+ devname, partno + 1, n);
|
||||||
|
+
|
||||||
|
+ if (!fdisk_is_partition_used(sf->cxt, partno))
|
||||||
|
+ fdisk_warnx(sf->cxt, _("warning: %s: partition %d is not defined yet"),
|
||||||
|
+ devname, partno + 1);
|
||||||
|
created = 1;
|
||||||
|
next_partno = partno;
|
||||||
|
}
|
||||||
|
--
|
||||||
|
2.1.0
|
||||||
|
|
2
sources
2
sources
@ -1 +1 @@
|
|||||||
912c550a4e5c47c0ce9abd0733fa9a64 util-linux-2.26.tar.xz
|
2308850946766677f3fabe0685e85de8 util-linux-2.26.1.tar.xz
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
### Header
|
### Header
|
||||||
Summary: A collection of basic system utilities
|
Summary: A collection of basic system utilities
|
||||||
Name: util-linux
|
Name: util-linux
|
||||||
Version: 2.26
|
Version: 2.26.1
|
||||||
Release: 1%{?dist}
|
Release: 1%{?dist}
|
||||||
License: GPLv2 and GPLv2+ and LGPLv2+ and BSD with advertising and Public Domain
|
License: GPLv2 and GPLv2+ and LGPLv2+ and BSD with advertising and Public Domain
|
||||||
Group: System Environment/Base
|
Group: System Environment/Base
|
||||||
@ -27,7 +27,7 @@ BuildRequires: libcap-ng-devel
|
|||||||
BuildRequires: python3-devel
|
BuildRequires: python3-devel
|
||||||
|
|
||||||
### Sources
|
### Sources
|
||||||
Source0: ftp://ftp.kernel.org/pub/linux/utils/util-linux/v2.25/util-linux-%{upstream_version}.tar.xz
|
Source0: ftp://ftp.kernel.org/pub/linux/utils/util-linux/v2.26/util-linux-%{upstream_version}.tar.xz
|
||||||
Source1: util-linux-login.pamd
|
Source1: util-linux-login.pamd
|
||||||
Source2: util-linux-remote.pamd
|
Source2: util-linux-remote.pamd
|
||||||
Source3: util-linux-chsh-chfn.pamd
|
Source3: util-linux-chsh-chfn.pamd
|
||||||
@ -78,6 +78,13 @@ Requires: libfdisk = %{version}-%{release}
|
|||||||
# 151635 - makeing /var/log/lastlog
|
# 151635 - makeing /var/log/lastlog
|
||||||
Patch0: 2.23-login-lastlog-create.patch
|
Patch0: 2.23-login-lastlog-create.patch
|
||||||
|
|
||||||
|
# upstream v2.27 / v2.26.2 backports (#1210428 and #1210912)
|
||||||
|
Patch1: 2.27-libfdisk-fix-symbols-versioning-script.patch
|
||||||
|
Patch2: 2.27-libfdisk-dos-retain-existing-boot-flag-when-resizing.patch
|
||||||
|
Patch3: 2.27-sfdisk-improve-N-warnings.patch
|
||||||
|
Patch4: 2.27-libfdisk-support-bootbits-protection-from-p-MBR.patch
|
||||||
|
Patch5: 2.27-sfdisk-enable-bootbits-protection.patch
|
||||||
|
|
||||||
%description
|
%description
|
||||||
The util-linux package contains a large variety of low-level system
|
The util-linux package contains a large variety of low-level system
|
||||||
utilities that are necessary for a Linux system to function. Among
|
utilities that are necessary for a Linux system to function. Among
|
||||||
@ -879,6 +886,12 @@ exit 0
|
|||||||
%{_libdir}/python*/site-packages/libmount/*
|
%{_libdir}/python*/site-packages/libmount/*
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Mon Apr 13 2015 Karel Zak <kzak@redhat.com> 2.26.1-1
|
||||||
|
- upgrade to v2.26.1
|
||||||
|
ftp://ftp.kernel.org/pub/linux/utils/util-linux/v2.26/v2.26.1-ReleaseNotes
|
||||||
|
- fix #1210912 - sfdisk 2.26 does not retain existing boot flag when resizing a partition
|
||||||
|
- fix #1210428 - sfdisk 2.26 destroys existing boot sector when editing disk label
|
||||||
|
|
||||||
* Thu Feb 19 2015 Karel Zak <kzak@redhat.com> 2.26-1
|
* Thu Feb 19 2015 Karel Zak <kzak@redhat.com> 2.26-1
|
||||||
- upgrade to stable release 2.26
|
- upgrade to stable release 2.26
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user