diff options
author | 2014-07-22 11:42:30 +0100 | |
---|---|---|
committer | 2014-07-22 11:42:30 +0100 | |
commit | 031baa8c4e849467c6d6859c18e350a82b8a64a4 (patch) | |
tree | 8d9ad4f660f12295a42e00740172574675d198e5 /sys-fs | |
parent | Update net-misc/openntpd-20080406-r8 (diff) | |
download | srcshelton-031baa8c4e849467c6d6859c18e350a82b8a64a4.tar.gz srcshelton-031baa8c4e849467c6d6859c18e350a82b8a64a4.tar.bz2 srcshelton-031baa8c4e849467c6d6859c18e350a82b8a64a4.zip |
Add missing patches for mdadm-3.3.1-r2
Diffstat (limited to 'sys-fs')
9 files changed, 477 insertions, 0 deletions
diff --git a/sys-fs/mdadm/Manifest b/sys-fs/mdadm/Manifest index ba566d25..2094a507 100644 --- a/sys-fs/mdadm/Manifest +++ b/sys-fs/mdadm/Manifest @@ -6,6 +6,14 @@ AUX mdadm-3.1.5-cflags.patch 850 SHA256 1ebe42ca18830b2aec578f0d72e3e36275ac0caa AUX mdadm-3.2.1-mdassemble.patch 487 SHA256 505f9fec01fd8a40f773fd6709337b2b29fc30a600cddd3075a647198279592c SHA512 258a4c00aaf0448b173fc8e201595d7378c7d6e77e97c98050dfdc3a0ba889c5320ad6517e1aec951d9f84a014dbd5b78f66d52cb21d57eb6a0a85e51e8cd73d WHIRLPOOL 5cc398866b82425923a5524636e886fa44b32a3c02cf64f6d7c93ce253704e6fb041f77bef6b1cf755d3b67582496cbab8af70ee213046713f1306e5e192e206 AUX mdadm-3.2.3-segv-assemble.patch 506 SHA256 4f1c91bb2a9a2b7354c119ac3dfc83acecae389bbe3e48c38950cb24892b0c66 SHA512 efc40a7fc584293de53fd2d3ef75df715273f6f219fef31eb58a5e980079366970ebcaaa7f0c55c56e1f15381d8580d19cf369d815420c7a26a2d8f515b533bd WHIRLPOOL a58fa29aada96d3c58c473236b9083b8f679892e6541fc4ec9a5d6a4f9057f98a972cab06a2f89930d441baea77726c00216a7ffaa968d98cf0b0715a28d6211 AUX mdadm-3.2.x-udevdir.patch 876 SHA256 937132cf80fed615e9714940819874b9f8ec0125df08e55db876601a1ac84365 SHA512 67635a7c66f319ef7dfd2397925ac599015316f2715785abc25eae6c46e4bb0e69d0e402bff48264c2e3347af679940b81964147c61b9d6407266634bd29791f WHIRLPOOL 75b0b6d11d3b85598fa96881e0f309a09e2e7d465f9bf46b02bde3230308c8532d1612af242c3107895713c8caa4b25864c39d66c4599ed4b939d8c37840c9af +AUX mdadm-3.3.1-DDF-validate-metadata_update-size-before-using-it.patch 1409 SHA256 a4168c58f7a75890e74b68ff1634ead1bead5f5ba28e02defb5972e6b62cc080 SHA512 ce8962daeebbdb92a16263d82019ff0ffa2e3127e0477b821ef157e1a71d958434fd2054e776ba0a816f334504a16ad276b655aa5951dd3331868e74db8488c3 WHIRLPOOL 3122994c9f5f31cac0dd4f8e4290148523069cc2f26905cad1fff4afa2408752178c912c52a9528d98eb5f0904e7c92fed1e6c1e60db8e519ff95f7a6c89f97e +AUX mdadm-3.3.1-Grow-Do-not-try-to-restart-if-reshape-is-running.patch 1656 SHA256 94447d1661040616a32343b6fc122ecde4efd8db88f634dcf7966a2e6a482eed SHA512 ebae416c12d85a381cff25634ee1f574ac1ae376ddf35c1c8ea3abb4f6978b8689a86aebeb7b6ad0496fa683de9882994d78314b49bae707439a5fabccf7fb2a WHIRLPOOL e98d3a171b09ca1584d0d4a119247f2227fcf72d7c32bc7c1522e4212c51356b07b25ebbd7a7429f2b851e30d42806c8957ac9d5e33c6d1a422a7c16b1118160 +AUX mdadm-3.3.1-Grow-fix-removal-of-line-in-wrong-case.patch 1080 SHA256 44ffffc5afaa5e2626cc42a19608b62385207eb10eeccac4632026a23df19958 SHA512 d666877ba2e2d32266beec1d67bff0edb1d3b39cb44e198ef3ff5c4fe1feb348aa1210becd306e3cbda8d46e8360e320080525698504f80a77c02b6781bd5df5 WHIRLPOOL c2145b004fec7007e086e4f41184e16c1b8cba9053a4c8473a599995c716f47c60c2e71e6a7c51c475e9bc848f80ff00109751e5c66e50c23a4d3aa16fd25234 +AUX mdadm-3.3.1-IMSM-use-strcpy-rather-than-pointless-strncpy.patch 1045 SHA256 e8c0e234f0567e8c4438b00b6760c6d5cf03724d642be4f855e77ab7624d0dfc SHA512 c49b50af731c858253d9b570045725748856c8666e071f34a8d72788ec594a4bd4b3a0b528c6a197903b49459b223d8c76bfbf20b8da358e5515c16b8d99b36a WHIRLPOOL 08fe6b31c21f6e5d6be089efc14442fda085b7645b80ba300500ea4e7d37eef3d0db4a267ee114a631942a34368da43feb68ade7b452ab11a23cc4679567d39a +AUX mdadm-3.3.1-IMSM-validate-metadata_update-size-before-using-it.patch 3882 SHA256 e9ffad102c4ba1d60927b2b9ad88962eb4f306672bf1cd1a2aadab74500ed9f0 SHA512 8ac28b8e6ede9cf51412656b030a84765519243cbd306f33a34920770dafa5b4abcebd5590e2279e524a1a4b1ebbb69a665e1da8939cdaf7051918e10eb0ca2c WHIRLPOOL 7c342506ed5ea6a3b9481b9a62173656c06cf5b6de9812d896911d5ca2a200c87c443cff8c26fb7eb8b0cf1c5a08ab8489ff17e5735172693b9274c7e37a8b37 +AUX mdadm-3.3.1-Makefile-install-mdadm-grow-continue-.service.patch 1001 SHA256 29be282474734ab4210a23bc810d001fb4587c632df2292f9681644a7546661f SHA512 3f2395d00e66d2d45e50cad9de6456bdbe0b1e4ab2ec925e19060b1f6d399f5fada1411539baa5cb9fbcd528d9ec184692a5d78890c3a23ac62de71ed00f5562 WHIRLPOOL b86a38d25e0b35dc34b4ca38580f4fea23f1400452bf96d1d695bec51854a6aba574e66a6b30cb32d6f7e1795855425b7ed3462949f2cbe5587e99cf2c453a00 +AUX mdadm-3.3.1-mdmon-allow-prepare_update-to-report-failure.patch 3654 SHA256 cf75b7def5736ced0e1b80b5a2845a74a1debeb8b116e284576135d9e192eac9 SHA512 05b8f395ba1dbf31998eba0303396dbed92f825d37a99e48ab67dd66b6275d31fced087fcd3d70bb08a5e18a38098efab8a5df855519b457b532bb7f1aeb9f51 WHIRLPOOL 06030ed4374284f82ee30352968c7533a496648c2756468c1c1fda3ad717aebcfa3d1192911709377d16a2fe51c1e3818ce5515d9252eadad8d90f0b3e50a7ee +AUX mdadm-3.3.1-mdmon-ensure-Unix-domain-socket-is-created-with-safe.patch 1015 SHA256 99b2d3a6cc36102933f393d07c8c45ec1591f001d39b0dc1619022ceb9cddadd SHA512 3f8f8a6cf3f75004916180d67257af504b722cce6fd85a1e0136fd46dc467ea5919e8d65ba7483f3960f0676e1bb0d3cc0b09d24acf235f2045247aa199d377f WHIRLPOOL 40e38f174daae78b45729f464851a39f9d502eccf56ecab5628ce6f87fc2cfa059ef587e8207869751fa8f0417dba9586c70a85c9a20480831d0e0432b43e3aa AUX mdadm.confd 205 SHA256 ec55674955af7a31da51b8b72b599e8519809287dad796a9b16155bcba471b79 SHA512 7bf66898000b3d02bbf0704a8032b0f4fc045380501dc8d2bbbb31d33b122d9c35879b25714663079eeadd207c9da87c9d9af8464e76146bf5b68594e73fd92c WHIRLPOOL b6a86bae6d298bcff17a497739109fa07f2bfb2682454a089dfef7ad51d2d770eec2661a5dd77140fe6ec33e94bc87d2378790eb06d11eace8dbe4ff0b83b677 AUX mdadm.rc 574 SHA256 3073b14619cb7b2c99c33f2d6cfd1e59ce5557899bffebaa65fa52f3caffadc7 SHA512 d01f5de3ca957189d3619fda4c982c776533b20fac232832bfb7f34de5724348be572c24ad35508e5dc48b2df4710a258a4d1af39471ff7ce2c56ada13dfa7ab WHIRLPOOL 1362c4cbef50bd904092c5cb575ac3336e7e75ead2819795221406e0f2665843e5500fa7ecaf9e48e0231773ed18ea7950ffb5188f2f4e2138944931418e6b69 AUX mdadm.service 307 SHA256 fdb0c813eb72c85445269eab1182cd68c8d1ca0abfefb2ac966344812d2f29dc SHA512 afa3fad6c260f864857c25d498cfd59778744a7bb0ea2b66c22395874089ee1ec875ab8c02307277aef224f547949d37fc3247a6a1d31fe8b80dbc0ce4edeeb5 WHIRLPOOL 410a781d9ca9d578ac88dd6277286f4ef7ec294e35d1ebf825e95148f56da8b6f9ed6f8170eeaf307753dce3be48217f174145151cb95c62d4a2ded0a56012bd diff --git a/sys-fs/mdadm/files/mdadm-3.3.1-DDF-validate-metadata_update-size-before-using-it.patch b/sys-fs/mdadm/files/mdadm-3.3.1-DDF-validate-metadata_update-size-before-using-it.patch new file mode 100644 index 00000000..befb7da9 --- /dev/null +++ b/sys-fs/mdadm/files/mdadm-3.3.1-DDF-validate-metadata_update-size-before-using-it.patch @@ -0,0 +1,44 @@ +From 1f17f96b538793a0e665e471f602c6fa490ec167 Mon Sep 17 00:00:00 2001 +From: NeilBrown <neilb@suse.de> +Date: Thu, 10 Jul 2014 15:59:06 +1000 +Subject: [PATCH 12/14] DDF: validate metadata_update size before using it. + +process_update already checks update->len, for all but +the 'magic', prepare_update doesn't at all. + +So add tests to prepare_update that we don't exceed the buffer. +This will consequently protect process_update from looking +for a 'magic' which isn't there. + +Reported-by: Vincent Berg <vberg@ioactive.com> +Signed-off-by: NeilBrown <neilb@suse.de> +--- + super-ddf.c | 10 ++++++++-- + 1 file changed, 8 insertions(+), 2 deletions(-) + +diff --git a/super-ddf.c b/super-ddf.c +index 1e43ca2..8957c2e 100644 +--- a/super-ddf.c ++++ b/super-ddf.c +@@ -4914,10 +4914,16 @@ static int ddf_prepare_update(struct supertype *st, + * If a malloc is needed, do it here. + */ + struct ddf_super *ddf = st->sb; +- be32 *magic = (be32 *)update->buf; ++ be32 *magic; ++ if (update->len < 4) ++ return 0; ++ magic = (be32 *)update->buf; + if (be32_eq(*magic, DDF_VD_CONF_MAGIC)) { + struct vcl *vcl; +- struct vd_config *conf = (struct vd_config *) update->buf; ++ struct vd_config *conf; ++ if (update->len < (int)sizeof(*conf)) ++ return 0; ++ conf = (struct vd_config *) update->buf; + if (posix_memalign(&update->space, 512, + offsetof(struct vcl, conf) + + ddf->conf_rec_len * 512) != 0) { +-- +2.0.0 + diff --git a/sys-fs/mdadm/files/mdadm-3.3.1-Grow-Do-not-try-to-restart-if-reshape-is-running.patch b/sys-fs/mdadm/files/mdadm-3.3.1-Grow-Do-not-try-to-restart-if-reshape-is-running.patch new file mode 100644 index 00000000..717317b8 --- /dev/null +++ b/sys-fs/mdadm/files/mdadm-3.3.1-Grow-Do-not-try-to-restart-if-reshape-is-running.patch @@ -0,0 +1,45 @@ +From 13ffbe89b6103c146c08eb1c9a70833306c8322b Mon Sep 17 00:00:00 2001 +From: Pawel Baldysiak <pawel.baldysiak@intel.com> +Date: Wed, 16 Jul 2014 12:20:34 +0200 +Subject: [PATCH 14/14] Grow: Do not try to restart if reshape is running + +Grow process did not check if reshape is already started +when deciding about restarting. +Sync_action should be checked in this case, and if +reshape is running - restart flag should not be set. +Otherwise, Grow process will fail to write data to +sysfs, and reshape will not be continued. + +Signed-off-by: Pawel Baldysiak <pawel.baldysiak@intel.com> +Signed-off-by: Artur Paszkiewicz <artur.paszkiewicz@intel.com> +Signed-off-by: NeilBrown <neilb@suse.de> +--- + Grow.c | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +diff --git a/Grow.c b/Grow.c +index a2f4f14..ea9cc60 100644 +--- a/Grow.c ++++ b/Grow.c +@@ -2822,6 +2822,7 @@ static int reshape_array(char *container, int fd, char *devname, + unsigned long long array_size; + int done; + struct mdinfo *sra = NULL; ++ char buf[20]; + + /* when reshaping a RAID0, the component_size might be zero. + * So try to fix that up. +@@ -2869,7 +2870,9 @@ static int reshape_array(char *container, int fd, char *devname, + goto release; + } + +- if (st->ss->external && restart && (info->reshape_progress == 0)) { ++ if (st->ss->external && restart && (info->reshape_progress == 0) && ++ !((sysfs_get_str(info, NULL, "sync_action", buf, sizeof(buf)) > 0) && ++ (strncmp(buf, "reshape", 7) == 0))) { + /* When reshape is restarted from '0', very begin of array + * it is possible that for external metadata reshape and array + * configuration doesn't happen. +-- +2.0.0 + diff --git a/sys-fs/mdadm/files/mdadm-3.3.1-Grow-fix-removal-of-line-in-wrong-case.patch b/sys-fs/mdadm/files/mdadm-3.3.1-Grow-fix-removal-of-line-in-wrong-case.patch new file mode 100644 index 00000000..acc38267 --- /dev/null +++ b/sys-fs/mdadm/files/mdadm-3.3.1-Grow-fix-removal-of-line-in-wrong-case.patch @@ -0,0 +1,39 @@ +From e339dba2a1744dc6860a58e286ded39fc993c2db Mon Sep 17 00:00:00 2001 +From: Pawel Baldysiak <pawel.baldysiak@intel.com> +Date: Wed, 11 Jun 2014 15:18:44 +0000 +Subject: [PATCH 02/14] Grow: fix removal of line in wrong case + +Commit 18d9bcfa33939cee345d4d7735bc6081bcc409c8 +removed wrong line (in case RAID0->RAID4). +This patch corrects this mistake +(line should be removed in case RAID4->RAID4). + +Signed-off-by: Pawel Baldysiak <pawel.baldysiak@intel.com> +Signed-off-by: NeilBrown <neilb@suse.de> +--- + Grow.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/Grow.c b/Grow.c +index 12730e2..a2f4f14 100644 +--- a/Grow.c ++++ b/Grow.c +@@ -1324,6 +1324,7 @@ char *analyse_change(char *devname, struct mdinfo *info, struct reshape *re) + + switch (re->level) { + case 4: ++ re->before.layout = 0; + re->after.layout = 0; + break; + case 5: +@@ -1339,7 +1340,6 @@ char *analyse_change(char *devname, struct mdinfo *info, struct reshape *re) + + switch (re->level) { + case 4: +- re->before.layout = 0; + re->after.layout = 0; + break; + case 5: +-- +2.0.0 + diff --git a/sys-fs/mdadm/files/mdadm-3.3.1-IMSM-use-strcpy-rather-than-pointless-strncpy.patch b/sys-fs/mdadm/files/mdadm-3.3.1-IMSM-use-strcpy-rather-than-pointless-strncpy.patch new file mode 100644 index 00000000..b63b1e73 --- /dev/null +++ b/sys-fs/mdadm/files/mdadm-3.3.1-IMSM-use-strcpy-rather-than-pointless-strncpy.patch @@ -0,0 +1,32 @@ +From 6d8d290a2f09a3bfd9e44f382ae5daea128772f7 Mon Sep 17 00:00:00 2001 +From: NeilBrown <neilb@suse.de> +Date: Thu, 3 Jul 2014 15:04:01 +1000 +Subject: [PATCH 03/14] IMSM: use strcpy rather than pointless strncpy. + +As strncpy doesn't guarantee to nul-terminate, some static +analysers get upset that it is followed by a 'strncat'. +So just use a 'strcpy' - strlen(disk_by_path) is constant +and definitely less than PATH_MAX. + +Link: https://github.com/neilbrown/mdadm/issues/4 +Signed-off-by: NeilBrown <neilb@suse.de> +--- + super-intel.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/super-intel.c b/super-intel.c +index 9dd807a..0106b4f 100644 +--- a/super-intel.c ++++ b/super-intel.c +@@ -9357,7 +9357,7 @@ static const char *imsm_get_disk_controller_domain(const char *path) + char *drv=NULL; + struct stat st; + +- strncpy(disk_path, disk_by_path, PATH_MAX - 1); ++ strcpy(disk_path, disk_by_path); + strncat(disk_path, path, PATH_MAX - strlen(disk_path) - 1); + if (stat(disk_path, &st) == 0) { + struct sys_dev* hba; +-- +2.0.0 + diff --git a/sys-fs/mdadm/files/mdadm-3.3.1-IMSM-validate-metadata_update-size-before-using-it.patch b/sys-fs/mdadm/files/mdadm-3.3.1-IMSM-validate-metadata_update-size-before-using-it.patch new file mode 100644 index 00000000..b1610835 --- /dev/null +++ b/sys-fs/mdadm/files/mdadm-3.3.1-IMSM-validate-metadata_update-size-before-using-it.patch @@ -0,0 +1,128 @@ +From 095b8088fa99ad1195d1aba03af2aa561b4a6379 Mon Sep 17 00:00:00 2001 +From: NeilBrown <neilb@suse.de> +Date: Thu, 10 Jul 2014 16:09:28 +1000 +Subject: [PATCH 13/14] IMSM: validate metadata_update size before using it. + +Every case in prepare_update check that the size message +size is sufficient, so process_update doesn't need to check anything. + +Reported-by: Vincent Berg <vberg@ioactive.com> +Signed-off-by: NeilBrown <neilb@suse.de> +--- + super-intel.c | 44 +++++++++++++++++++++++++++++++++++++++++--- + 1 file changed, 41 insertions(+), 3 deletions(-) + +diff --git a/super-intel.c b/super-intel.c +index 2547b4a..b4efa72 100644 +--- a/super-intel.c ++++ b/super-intel.c +@@ -8587,7 +8587,7 @@ static void imsm_process_update(struct supertype *st, + } + case update_add_remove_disk: { + /* we may be able to repair some arrays if disks are +- * being added, check teh status of add_remove_disk ++ * being added, check the status of add_remove_disk + * if discs has been added. + */ + if (add_remove_disk_update(super)) { +@@ -8617,19 +8617,28 @@ static int imsm_prepare_update(struct supertype *st, + * integrated by the monitor thread without worrying about live pointers + * in the manager thread. + */ +- enum imsm_update_type type = *(enum imsm_update_type *) update->buf; ++ enum imsm_update_type type; + struct intel_super *super = st->sb; + struct imsm_super *mpb = super->anchor; + size_t buf_len; + size_t len = 0; + ++ if (update->len < (int)sizeof(type)) ++ return 0; ++ ++ type = *(enum imsm_update_type *) update->buf; ++ + switch (type) { + case update_general_migration_checkpoint: ++ if (update->len < (int)sizeof(struct imsm_update_general_migration_checkpoint)) ++ return 0; + dprintf("imsm: prepare_update() " + "for update_general_migration_checkpoint called\n"); + break; + case update_takeover: { + struct imsm_update_takeover *u = (void *)update->buf; ++ if (update->len < (int)sizeof(*u)) ++ return 0; + if (u->direction == R0_TO_R10) { + void **tail = (void **)&update->space_list; + struct imsm_dev *dev = get_imsm_dev(super, u->subarray); +@@ -8670,6 +8679,9 @@ static int imsm_prepare_update(struct supertype *st, + struct intel_dev *dl; + void **space_tail = (void**)&update->space_list; + ++ if (update->len < (int)sizeof(*u)) ++ return 0; ++ + dprintf("imsm: imsm_prepare_update() for update_reshape\n"); + + for (dl = super->devlist; dl; dl = dl->next) { +@@ -8702,6 +8714,9 @@ static int imsm_prepare_update(struct supertype *st, + void *s; + int current_level = -1; + ++ if (update->len < (int)sizeof(*u)) ++ return 0; ++ + dprintf("imsm: imsm_prepare_update() for update_reshape\n"); + + /* add space for bigger array in update +@@ -8769,6 +8784,13 @@ static int imsm_prepare_update(struct supertype *st, + break; + } + case update_size_change: { ++ if (update->len < (int)sizeof(struct imsm_update_size_change)) ++ return 0; ++ break; ++ } ++ case update_activate_spare: { ++ if (update->len < (int)sizeof(struct imsm_update_activate_spare)) ++ return 0; + break; + } + case update_create_array: { +@@ -8781,6 +8803,9 @@ static int imsm_prepare_update(struct supertype *st, + int i; + int activate = 0; + ++ if (update->len < (int)sizeof(*u)) ++ return 0; ++ + inf = get_disk_info(u); + len = sizeof_imsm_dev(dev, 1); + /* allocate a new super->devlist entry */ +@@ -8802,9 +8827,22 @@ static int imsm_prepare_update(struct supertype *st, + } + len += activate * sizeof(struct imsm_disk); + break; +- default: ++ } ++ case update_kill_array: { ++ if (update->len < (int)sizeof(struct imsm_update_kill_array)) ++ return 0; + break; + } ++ case update_rename_array: { ++ if (update->len < (int)sizeof(struct imsm_update_rename_array)) ++ return 0; ++ break; ++ } ++ case update_add_remove_disk: ++ /* no update->len needed */ ++ break; ++ default: ++ return 0; + } + + /* check if we need a larger metadata buffer */ +-- +2.0.0 + diff --git a/sys-fs/mdadm/files/mdadm-3.3.1-Makefile-install-mdadm-grow-continue-.service.patch b/sys-fs/mdadm/files/mdadm-3.3.1-Makefile-install-mdadm-grow-continue-.service.patch new file mode 100644 index 00000000..431bfd1a --- /dev/null +++ b/sys-fs/mdadm/files/mdadm-3.3.1-Makefile-install-mdadm-grow-continue-.service.patch @@ -0,0 +1,28 @@ +From 616f197f9d6d044afb9e27ddc9cd087d21d610f0 Mon Sep 17 00:00:00 2001 +From: NeilBrown <neilb@suse.de> +Date: Tue, 10 Jun 2014 20:34:40 +1000 +Subject: [PATCH 01/14] Makefile: install mdadm-grow-continue@.service + +Forgot to add this to install-systemd target + +Signed-off-by: NeilBrown <neilb@suse.de> +--- + Makefile | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/Makefile b/Makefile +index c7e7a42..1a4a5dc 100644 +--- a/Makefile ++++ b/Makefile +@@ -290,7 +290,7 @@ install-udev: udev-md-raid-arrays.rules udev-md-raid-assembly.rules + + install-systemd: systemd/mdmon@.service + @for file in mdmon@.service mdmonitor.service mdadm-last-resort@.timer \ +- mdadm-last-resort@.service ; \ ++ mdadm-last-resort@.service mdadm-grow-continue@.service; \ + do sed -e 's,BINDIR,$(BINDIR),g' systemd/$$file > .install.tmp && \ + echo $(INSTALL) -D -m 644 systemd/$$file $(DESTDIR)$(SYSTEMD_DIR)/$$file ; \ + $(INSTALL) -D -m 644 .install.tmp $(DESTDIR)$(SYSTEMD_DIR)/$$file ; \ +-- +2.0.0 + diff --git a/sys-fs/mdadm/files/mdadm-3.3.1-mdmon-allow-prepare_update-to-report-failure.patch b/sys-fs/mdadm/files/mdadm-3.3.1-mdmon-allow-prepare_update-to-report-failure.patch new file mode 100644 index 00000000..772248b1 --- /dev/null +++ b/sys-fs/mdadm/files/mdadm-3.3.1-mdmon-allow-prepare_update-to-report-failure.patch @@ -0,0 +1,119 @@ +From 5fe6f031d9a21a935f0ef1b1fbdb314b53f2199f Mon Sep 17 00:00:00 2001 +From: NeilBrown <neilb@suse.de> +Date: Thu, 10 Jul 2014 15:54:02 +1000 +Subject: [PATCH 11/14] mdmon: allow prepare_update to report failure. + +If 'prepare_update' fails for some reason there is little +point continuing on to 'process_update'. +For now only malloc failures are caught, but other failures +will be considered in future. + +Signed-off-by: NeilBrown <neilb@suse.de> +--- + managemon.c | 3 ++- + mdadm.h | 5 ++++- + super-ddf.c | 8 +++++--- + super-intel.c | 9 +++++---- + 4 files changed, 16 insertions(+), 9 deletions(-) + +diff --git a/managemon.c b/managemon.c +index 5f7e2ce..1c9eccc 100644 +--- a/managemon.c ++++ b/managemon.c +@@ -819,7 +819,8 @@ static void handle_message(struct supertype *container, struct metadata_update * + mu->space_list = NULL; + mu->next = NULL; + if (container->ss->prepare_update) +- container->ss->prepare_update(container, mu); ++ if (!container->ss->prepare_update(container, mu)) ++ free_updates(&mu); + queue_metadata_update(mu); + } + } +diff --git a/mdadm.h b/mdadm.h +index 914d67c..02a9288 100644 +--- a/mdadm.h ++++ b/mdadm.h +@@ -929,7 +929,10 @@ extern struct superswitch { + void (*sync_metadata)(struct supertype *st); + void (*process_update)(struct supertype *st, + struct metadata_update *update); +- void (*prepare_update)(struct supertype *st, ++ /* Prepare updates allocates extra memory that might be ++ * needed. If the update cannot be understood, return 0. ++ */ ++ int (*prepare_update)(struct supertype *st, + struct metadata_update *update); + + /* activate_spare will check if the array is degraded and, if it +diff --git a/super-ddf.c b/super-ddf.c +index ab9fc46..1e43ca2 100644 +--- a/super-ddf.c ++++ b/super-ddf.c +@@ -4906,8 +4906,8 @@ static void ddf_process_update(struct supertype *st, + /* case DDF_SPARE_ASSIGN_MAGIC */ + } + +-static void ddf_prepare_update(struct supertype *st, +- struct metadata_update *update) ++static int ddf_prepare_update(struct supertype *st, ++ struct metadata_update *update) + { + /* This update arrived at managemon. + * We are about to pass it to monitor. +@@ -4922,15 +4922,17 @@ static void ddf_prepare_update(struct supertype *st, + offsetof(struct vcl, conf) + + ddf->conf_rec_len * 512) != 0) { + update->space = NULL; +- return; ++ return 0; + } + vcl = update->space; + vcl->conf.sec_elmnt_count = conf->sec_elmnt_count; + if (alloc_other_bvds(ddf, vcl) != 0) { + free(update->space); + update->space = NULL; ++ return 0; + } + } ++ return 1; + } + + /* +diff --git a/super-intel.c b/super-intel.c +index 7734bde..2547b4a 100644 +--- a/super-intel.c ++++ b/super-intel.c +@@ -8607,8 +8607,8 @@ static void imsm_process_update(struct supertype *st, + + static struct mdinfo *get_spares_for_grow(struct supertype *st); + +-static void imsm_prepare_update(struct supertype *st, +- struct metadata_update *update) ++static int imsm_prepare_update(struct supertype *st, ++ struct metadata_update *update) + { + /** + * Allocate space to hold new disk entries, raid-device entries or a new +@@ -8828,6 +8828,7 @@ static void imsm_prepare_update(struct supertype *st, + else + super->next_buf = NULL; + } ++ return 1; + } + + /* must be called while manager is quiesced */ +@@ -9716,8 +9717,8 @@ static void imsm_update_metadata_locally(struct supertype *st, + mu.space = NULL; + mu.space_list = NULL; + mu.next = NULL; +- imsm_prepare_update(st, &mu); +- imsm_process_update(st, &mu); ++ if (imsm_prepare_update(st, &mu)) ++ imsm_process_update(st, &mu); + + while (mu.space_list) { + void **space = mu.space_list; +-- +2.0.0 + diff --git a/sys-fs/mdadm/files/mdadm-3.3.1-mdmon-ensure-Unix-domain-socket-is-created-with-safe.patch b/sys-fs/mdadm/files/mdadm-3.3.1-mdmon-ensure-Unix-domain-socket-is-created-with-safe.patch new file mode 100644 index 00000000..9780196e --- /dev/null +++ b/sys-fs/mdadm/files/mdadm-3.3.1-mdmon-ensure-Unix-domain-socket-is-created-with-safe.patch @@ -0,0 +1,34 @@ +From 120ec6f7b96455e42bdfa9131c0c9026c57eaf19 Mon Sep 17 00:00:00 2001 +From: NeilBrown <neilb@suse.de> +Date: Thu, 3 Jul 2014 17:06:45 +1000 +Subject: [PATCH 09/14] mdmon: ensure Unix domain socket is created with safe + permissions. + +In the unlikely case that mdmon is started with an overly +permissive umask, we don't want to risk giving away world acccess. + +All other "mkdir" and "O_CREAT" calls in mdmon and mdadm set +a suitably restrictive permission mask. 'bind' don't take an +explicit mask so it needs an implicit one. + +Reported-by: Vincent Berg <vberg@ioactive.com> +Signed-off-by: NeilBrown <neilb@suse.de> +--- + mdmon.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/mdmon.c b/mdmon.c +index b84d4d9..21221cd 100644 +--- a/mdmon.c ++++ b/mdmon.c +@@ -232,6 +232,7 @@ static int make_control_sock(char *devname) + + addr.sun_family = PF_LOCAL; + strcpy(addr.sun_path, path); ++ umask(077); /* ensure no world write access */ + if (bind(sfd, &addr, sizeof(addr)) < 0) { + close(sfd); + return -1; +-- +2.0.0 + |