From: Hawrylewicz Czarnowski, Przemyslaw Date: Wed, 7 Dec 2011 01:15:55 +0000 (+1100) Subject: fix: imsm: validate strip size - tuned up X-Git-Tag: mdadm-3.2.3~38 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=70eb8219ac128ca88c1beff1e9cf48ed23846eea;p=thirdparty%2Fmdadm.git fix: imsm: validate strip size - tuned up Neil's proposal seems more reasonable and shows what is really going on here. Signed-off-by: Przemyslaw Czarnowski Signed-off-by: NeilBrown --- diff --git a/platform-intel.h b/platform-intel.h index 99450ba7..c997f1b8 100644 --- a/platform-intel.h +++ b/platform-intel.h @@ -124,13 +124,12 @@ static inline int imsm_orom_has_raid5(const struct imsm_orom *orom) static inline int imsm_orom_has_chunk(const struct imsm_orom *orom, int chunk) { int fs = ffs(chunk); - int orom_chunk_bit; - if (!fs) return 0; fs--; /* bit num to bit index */ - orom_chunk_bit = (orom->sss & (1 << (fs - 1))); - return orom_chunk_bit && 1 << orom_chunk_bit == chunk; + if (chunk & (chunk-1)) + return 0; /* not a power of 2 */ + return !!(orom->sss & (1 << (fs - 1))); }