[Vivid][SRU][patch]init: fix regression by supporting devices with major:minor:offset format

Stefan Bader stefan.bader at canonical.com
Mon May 11 16:21:00 UTC 2015


On 11.05.2015 09:11, Zhang, Xiong Y wrote:
> The system will reboot after resuming from S4 on 15.04.
> The following commit fixes this broken.

Asking about a LP bug was probably stupid. Probably rather something that might
be stable. Just confused as the commit that was claimed to introduce the
regression seems to be 4.1. Why would that be required for Vivid?

-Stefan

>  
> commit cb31ef485dd4c6a205d1064b42027f82076d00c8
> Author: Chen Yu <yu.c.chen at intel.com>
> Date:   Sun May 3 22:35:05 2015 +0800
>  
>     init: fix regression by supporting devices with major:minor:offset format
>  
>     Commit 283e7ad02 ("init: stricter checking of major:minor root=
>     values") was so strict that it exposed the fact that a previously
>     unknown device format was being used.
>  
>     Distributions like Ubuntu uses klibc (rather than uswsusp) to resume
>     system from hibernation.  klibc expressed the swap partition/file in
>     the form of major:minor:offset.  For example, 8:3:0 represents a swap
>     partition in klibc, and klibc's resume process in initrd will finally
>     echo 8:3:0 to /sys/power/resume for manually resuming.  However, due
>     to commit 283e7ad02's stricter checking, 8:3:0 will be treated as an
>     invalid device format, and manual resuming from hibernation will fail.
>  
>     Fix this by adding support for devices with major:minor:offset format
>     when resuming from hibernation.
>  
>     Reported-by: Prigent, Christophe <christophe.prigent at intel.com>
>     Signed-off-by: Chen Yu <yu.c.chen at intel.com>
>     Acked-by: Rafael J. Wysocki <rjw at rjwysocki.net>
>     Signed-off-by: Mike Snitzer <snitzer at redhat.com>
>  
> diff --git a/init/do_mounts.c b/init/do_mounts.c
> index 8369ffa..a95bbdb 100644
> --- a/init/do_mounts.c
> +++ b/init/do_mounts.c
> @@ -225,10 +225,11 @@ dev_t name_to_dev_t(const char *name)
> #endif
>  
>         if (strncmp(name, "/dev/", 5) != 0) {
> -               unsigned maj, min;
> +               unsigned maj, min, offset;
>                 char dummy;
>  
> -               if (sscanf(name, "%u:%u%c", &maj, &min, &dummy) == 2) {
> +               if ((sscanf(name, "%u:%u%c", &maj, &min, &dummy) == 2) ||
> +                   (sscanf(name, "%u:%u:%u:%c", &maj, &min, &offset, &dummy) ==
> 3)) {
>                         res = MKDEV(maj, min);
>                         if (maj != MAJOR(res) || min != MINOR(res))
>                                 goto fail;
> (END)
>  
> 
> 


-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: OpenPGP digital signature
URL: <https://lists.ubuntu.com/archives/kernel-team/attachments/20150511/fd3135fd/attachment.sig>


More information about the kernel-team mailing list