FAILED: patch "[PATCH] scsi: aacraid: Fix udev inquiry race condition" failed to apply to 4.4-stable tree
Subsystems (3)
[email protected]
maintainerThe patch below does not apply to the 4.4-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
Quoted 1 line
From
f4e8708d3104437fd7716e957f38c265b0c509efMon Sep 17 00:00:00 2001
From: Raghava Aditya Renukunta <[email protected]>
Date: Tue, 26 Dec 2017 20:34:22 -0800
Subject: [PATCH] scsi: aacraid: Fix udev inquiry race condition
When udev requests for a devices inquiry string, it might create multiple threads causing a race condition on the shared inquiry resource string.
Created a buffer with the string for each thread.
Cc <[email protected]>
Fixes 3bc8070fb75b3315 ([SCSI] aacraid: SMC vendor identification)
Signed-off-by Raghava Aditya Renukunta <[email protected]>
Signed-off-by Martin K. Petersen <[email protected]>
drivers/scsi/aacraid/aachba.c +12 -4
@@ -913,8 +913,16 @@ static void setinqstr(struct aac_dev *dev, void *data, int tindex)memset (str,' ' ,sizeof (*str));if (sup_adap_info->adapter_type_text[0 ]) { -char *cp = sup_adap_info->adapter_type_text;int c; +char *cp; +char *cname =kmemdup (sup_adap_info->adapter_type_text, +sizeof (sup_adap_info->adapter_type_text), +GFP_ATOMIC ); + +if (!cname) +return ; + + cp = cname;if ((cp[0 ] =='A' ) && (cp[1 ] =='O' ) && (cp[2 ] =='C' ))inqstrcpy ("SMC" , str->vid);else {
@@ -923,7 +931,7 @@ static void setinqstr(struct aac_dev *dev, void *data, int tindex) ++cp; c = *cp; *cp ='\0' ; -inqstrcpy (sup_adap_info->adapter_type_text, str->vid); +inqstrcpy (cname, str->vid); *cp = c;while (*cp && *cp !=' ' ) ++cp;
@@ -937,8 +945,8 @@ static void setinqstr(struct aac_dev *dev, void *data, int tindex) cp[sizeof (str->pid)] ='\0' ; }inqstrcpy (cp, str->pid); -if (c) - cp[sizeof (str->pid)] = c; + +kfree (cname); }else {struct aac_driver_ident *mp =aac_get_driver_ident (dev->cardtype);