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-rc2.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
|
||||
Summary: A collection of basic system utilities
|
||||
Name: util-linux
|
||||
Version: 2.26
|
||||
Version: 2.26.1
|
||||
Release: 1%{?dist}
|
||||
License: GPLv2 and GPLv2+ and LGPLv2+ and BSD with advertising and Public Domain
|
||||
Group: System Environment/Base
|
||||
@ -27,7 +27,7 @@ BuildRequires: libcap-ng-devel
|
||||
BuildRequires: python3-devel
|
||||
|
||||
### 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
|
||||
Source2: util-linux-remote.pamd
|
||||
Source3: util-linux-chsh-chfn.pamd
|
||||
@ -78,6 +78,13 @@ Requires: libfdisk = %{version}-%{release}
|
||||
# 151635 - makeing /var/log/lastlog
|
||||
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
|
||||
The util-linux package contains a large variety of low-level system
|
||||
utilities that are necessary for a Linux system to function. Among
|
||||
@ -879,6 +886,12 @@ exit 0
|
||||
%{_libdir}/python*/site-packages/libmount/*
|
||||
|
||||
%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
|
||||
- upgrade to stable release 2.26
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user