* [PATCH] imsm: fix: correct checking volume's degradation
@ 2012-05-25 13:06 Lukasz Dorau
2012-05-28 23:35 ` NeilBrown
0 siblings, 1 reply; 2+ messages in thread
From: Lukasz Dorau @ 2012-05-25 13:06 UTC (permalink / raw)
To: neilb; +Cc: linux-raid, dan.j.williams, ed.ciechanowski
We do not check the return value of sysfs_get_ll() now. It is wrong.
If reading of the sysfs "degraded" key does not succeed,
the "new_degraded" variable will not be initiated
and accidentally it can have the value of "degraded" variable.
In that case the change of degradation will not be checked.
It happens if mdadm is compiled with gcc's "-fstack-protector" option
when one tries to stop a volume under reshape (e.g. OLCE).
Reshape seems to be finished then (metadata is in normal/clean state)
but it is not finished, it is broken and data are corrupted.
Now we always check the return value of sysfs_get_ll().
Even if reading of the sysfs "degraded" key does not succeed
(rv == -1) the change of degradation will be checked.
Signed-off-by: Lukasz Dorau <lukasz.dorau@intel.com>
---
super-intel.c | 6 ++++--
1 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/super-intel.c b/super-intel.c
index 6c87e20..07ab9ae 100644
--- a/super-intel.c
+++ b/super-intel.c
@@ -10370,8 +10370,10 @@ int check_degradation_change(struct mdinfo *info,
int degraded)
{
unsigned long long new_degraded;
- sysfs_get_ll(info, NULL, "degraded", &new_degraded);
- if (new_degraded != (unsigned long long)degraded) {
+ int rv;
+
+ rv = sysfs_get_ll(info, NULL, "degraded", &new_degraded);
+ if ((rv == -1) || (new_degraded != (unsigned long long)degraded)) {
/* check each device to ensure it is still working */
struct mdinfo *sd;
new_degraded = 0;
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH] imsm: fix: correct checking volume's degradation
2012-05-25 13:06 [PATCH] imsm: fix: correct checking volume's degradation Lukasz Dorau
@ 2012-05-28 23:35 ` NeilBrown
0 siblings, 0 replies; 2+ messages in thread
From: NeilBrown @ 2012-05-28 23:35 UTC (permalink / raw)
To: Lukasz Dorau; +Cc: linux-raid, dan.j.williams, ed.ciechanowski
[-- Attachment #1: Type: text/plain, Size: 1702 bytes --]
On Fri, 25 May 2012 15:06:41 +0200 Lukasz Dorau <lukasz.dorau@intel.com>
wrote:
> We do not check the return value of sysfs_get_ll() now. It is wrong.
> If reading of the sysfs "degraded" key does not succeed,
> the "new_degraded" variable will not be initiated
> and accidentally it can have the value of "degraded" variable.
> In that case the change of degradation will not be checked.
>
> It happens if mdadm is compiled with gcc's "-fstack-protector" option
> when one tries to stop a volume under reshape (e.g. OLCE).
> Reshape seems to be finished then (metadata is in normal/clean state)
> but it is not finished, it is broken and data are corrupted.
>
> Now we always check the return value of sysfs_get_ll().
> Even if reading of the sysfs "degraded" key does not succeed
> (rv == -1) the change of degradation will be checked.
>
> Signed-off-by: Lukasz Dorau <lukasz.dorau@intel.com>
> ---
> super-intel.c | 6 ++++--
> 1 files changed, 4 insertions(+), 2 deletions(-)
>
> diff --git a/super-intel.c b/super-intel.c
> index 6c87e20..07ab9ae 100644
> --- a/super-intel.c
> +++ b/super-intel.c
> @@ -10370,8 +10370,10 @@ int check_degradation_change(struct mdinfo *info,
> int degraded)
> {
> unsigned long long new_degraded;
> - sysfs_get_ll(info, NULL, "degraded", &new_degraded);
> - if (new_degraded != (unsigned long long)degraded) {
> + int rv;
> +
> + rv = sysfs_get_ll(info, NULL, "degraded", &new_degraded);
> + if ((rv == -1) || (new_degraded != (unsigned long long)degraded)) {
> /* check each device to ensure it is still working */
> struct mdinfo *sd;
> new_degraded = 0;
applied, thanks.
NeilBrown
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 828 bytes --]
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2012-05-28 23:35 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-05-25 13:06 [PATCH] imsm: fix: correct checking volume's degradation Lukasz Dorau
2012-05-28 23:35 ` NeilBrown
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).