[PATCH v3 1/2] init/do_mounts.c: ignore final \n in name_to_dev_t
From: akpm@linux-foundation.org (Andrew Morton)
Date: 2014-01-28 20:54:46
Also in:
linux-pm, lkml
On Tue, 28 Jan 2014 10:59:26 -0800 Sebastian Capella [off-list ref] wrote:
quoted
Do you have any feedback for me on this? I'm happy do make any changes you think are correct, but I'm unsure if you're asking me for option #3 above. It's quite an intrusive change, and changes old, established code and I'd like confirmation that's what you'd like before proceeding down that path. I've submitted patches with both options #1 and #2 above. Thanks, SebastianPing. Sorry for the lapse in attention to this. Could you please clarify what is needed for this to be acceptable? I'm a little confused about what is being asked of me.
The problem is that kernel/power/hibernate.c:resume_store() is handed a
newline-terminated string, yes? And if it blindly hands that string
over to name_to_dev_t(), name_to_dev_t() fails because the string is
wrong.
This is an oddity of the sysfs->kernel interface and altering
name_to_dev_t doesn't really seem appropriate for this problem - it
would be better to fix the caller to pass in the correct string.
Something like...
/*
* Clean up a string which may have leading and/or trailing whitespace (as
* defined by isspace()) by trimming off that whitespace. Returns an address
* which the caller must kfree(), or NULL on error.
*/
char *strim_copy(const char *s, gfp_t gfp)
{
char *ret = kstrdup(skip_spaces(s), gfp);
if (ret)
strim(ret);
return ret;
}
EXPORT_SYMBOL(strim_copy);