Bug 788830 - grub2-setup Segmentation fault when boot device is RAID1 md 1.2 (mdraid1x)
Summary: grub2-setup Segmentation fault when boot device is RAID1 md 1.2 (mdraid1x)
Keywords:
Status: CLOSED WONTFIX
Alias: None
Product: Fedora
Classification: Fedora
Component: grub2
Version: 16
Hardware: x86_64
OS: Linux
unspecified
low
Target Milestone: ---
Assignee: Peter Jones
QA Contact: Fedora Extras Quality Assurance
URL:
Whiteboard:
Depends On:
Blocks:
TreeView+ depends on / blocked
 
Reported: 2012-02-09 05:25 UTC by Alexander Murashkin
Modified: 2013-02-13 21:15 UTC (History)
10 users (show)

Fixed In Version:
Doc Type: Bug Fix
Doc Text:
Clone Of:
Environment:
Last Closed: 2013-02-13 21:15:41 UTC
Type: ---
Embargoed:


Attachments (Terms of Use)

Description Alexander Murashkin 2012-02-09 05:25:08 UTC
Description of problem:

grub2-setup crashes with signal SIGSEGV (Segmentation fault) when boot device is md device with 1.2 superblock.

# mdadm --query --detail /dev/md10
/dev/md10:
        Version : 1.2
     Raid Level : raid1
           Name : abrakodabra:10
...
# /sbin/grub2-setup   /dev/md10
Segmentation fault (core dumped)

The problem happens because array->number field is assigned out-of-range value (more info at the end)  

Version-Release number of selected component (if applicable):

grub2-1.99-13.fc16.x86_64

How reproducible:

Steps to Reproduce:

1. make RAID1 md device with 1.2 superblock using 2 identical physical devices or partitions.
 
mdadm --create /dev/md10 --metadata=1.2 --raid-devices=2 --level=mirror --bitmap=internal --name=10 /dev/sdc /dev/sdd

2. try to setup GRUB2

/sbin/grub2-setup   /dev/md10
  
Actual results:

Program received signal SIGSEGV, Segmentation fault.
grub_util_biosdisk_is_floppy (disk=0x871450) at grub-core/kern/emu/hostdisk.c:1833
(gdb) p *disk
$1 = {name = 0x871d10 "mduuid/28e5...5453", dev = 0x64b620, total_sectors = 2097128, >>>> id = 1073741825 <<<<<, partition = 0x0, read_hook = 0, data = 0x856380}

Expected results:

Something reasonable - either completed setup or some error message.

Additional info:

The problem happens because array->number field is assigned out-of-range value in grub-core/disk/raid.c:620. The following happens

-------- grub-core/disk/raid.c ----- 

insert_array (grub_disk_t disk, struct grub_raid_array *new_array,...)
...
    if (array->name || p)                           // line 614
          ...  
          int i = array->name ? 0x40000000 : 0;     // line 620
          ...
           i++;                                     // line 637
          ...
          array->number = i;                        // line 633

grub_raid_open (const char *name, grub_disk_t disk)
...
    disk->id = array->number;                       // line 173

As the array has name array->number field gets very large value, for example, 1073741825 (0x40000001). This value later is copied to disk->id field.

--------- grub-core/kern/emu/hostdisk.c -----

struct                                              // line 131
{
  char *drive;
  char *device;
} map[256];
...
grub_util_biosdisk_is_floppy (grub_disk_t disk)
  ...
  fd = open (map[disk->id].device, O_RDONLY);       // line 1833

map array size is only 256 but it is accessed with index (disk->id) 1073741825. So signal SIGSEGV happens.

Comment 1 Joel Uckelman 2012-02-20 05:18:23 UTC
I get the same problem with a RAID1 with 1.0 metadata:

[uckelman@hydra ~]$ sudo mdadm --query --detail /dev/md0
/dev/md0:
        Version : 1.0
  Creation Time : Mon Jun 14 18:04:08 2010
     Raid Level : raid1
     Array Size : 511988 (500.07 MiB 524.28 MB)
  Used Dev Size : 511988 (500.07 MiB 524.28 MB)
   Raid Devices : 2
  Total Devices : 2
    Persistence : Superblock is persistent

    Update Time : Sun Feb 19 22:14:54 2012
          State : clean 
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0

           Name : localhost.localdomain:0
           UUID : fc87b512:11761218:10f1025d:52a1ba96
         Events : 3400

    Number   Major   Minor   RaidDevice State
       0       8       18        0      active sync   /dev/sdb2
       1       8        2        1      active sync   /dev/sda2
[uckelman@hydra ~]$ sudo /sbin/grub2-install /dev/md0
/sbin/grub2-install: line 661:  4749 Segmentation fault      "$grub_setup" ${allow_floppy} ${setup_verbose} ${setup_force} --directory="${grubdir}" --device-map="${device_map}" "${install_device}"

Comment 2 Robin Powell 2012-03-10 19:20:21 UTC
Same here.  Anyone got a fix or workaround?


root@basti# /sbin/grub2-install /dev/md0
/sbin/grub2-install: line 661: 12158 Segmentation fault      "$grub_setup" ${allow_floppy} ${setup_verbose} ${setup_force} --directory="${grubdir}" --device-map="${device_map}" "${install_device}"
root@basti#  mdadm --query --detail /dev/md0
/dev/md0:
        Version : 1.0
  Creation Time : Mon Jun  6 17:25:06 2011
     Raid Level : raid1
     Array Size : 2097140 (2048.33 MiB 2147.47 MB)
  Used Dev Size : 2097140 (2048.33 MiB 2147.47 MB)
   Raid Devices : 3
  Total Devices : 3
    Persistence : Superblock is persistent

  Intent Bitmap : Internal

    Update Time : Sat Mar 10 11:19:44 2012
          State : active
 Active Devices : 3
Working Devices : 3
 Failed Devices : 0
  Spare Devices : 0

           Name : basti.digitalkingdom.org:0  (local to host basti.digitalkingdom.org)
           UUID : e07f5bf0:6c37368e:d110ddd4:2ba724c6
         Events : 128

    Number   Major   Minor   RaidDevice State
       0       8        1        0      active sync   /dev/sda1
       1       8       17        1      active sync   /dev/sdb1
       2       8       33        2      active sync   /dev/sdc1

Comment 3 Ian Donaldson 2012-03-18 11:00:11 UTC
Seeing this also on grub2-1.99-13.fc16.x86_64
with mirrored disks and Version 1.2 superblocks.  

This will make rollout to my servers which
all have md mirrored disks impossible unless there is a workaround.

Comment 4 Mads Kiilerich 2012-04-17 21:45:13 UTC
Can you reproduce this on f17 with a more recent grub? It seems like I can't.

grub2-setup is no longer - I assume grub2-install should be used instead.

Comment 5 Mads Kiilerich 2012-04-30 22:57:06 UTC
(In reply to comment #4)
> grub2-setup is no longer

it has been renamed to grub2-bios-setup.

Please try with grub2-2.0-0.24.beta4.fc17 which has been pushed to f17 stable.

Comment 6 Samuel Sieb 2012-05-01 19:27:48 UTC
I just tried installing F17-beta and it can't install the bootloader because grub2-probe is segfaulting.  It has that version of grub2.  See bug 581451 for a screenshot.

Comment 7 Samuel Sieb 2012-05-01 21:24:56 UTC
This may be caused by bug 750794.

Comment 8 Mads Kiilerich 2012-05-07 16:02:22 UTC
Can you confirm if this issue is the same as bug 809111? Can it be solved by removing device.map or using the grub2 from https://bugzilla.redhat.com/show_bug.cgi?id=809111#c22 ?

Comment 9 Vladimir Serbinenko 2012-06-01 11:49:09 UTC
This is almost surey the bug which was fixed by following upstream commit:
revno: 3425
committer: Vladimir 'phcoder' Serbinenko <phcoder>
branch nick: grub
timestamp: Wed 2011-09-28 14:07:53 +0200
message:
        * grub-core/kern/emu/hostdisk.c (grub_util_biosdisk_is_floppy):
        Return 0 if disk isn't biosdisk.

Comment 10 Mads Kiilerich 2012-06-01 12:00:40 UTC
Comment 6 claims to have seen the segfault with beta4 which do include that commit.

Bug 826812 reported a crash that might have been similar ... but didn't leave enough information.

Comment 11 Vladimir Serbinenko 2012-06-01 12:10:07 UTC
It wasn't beta4. If you look at beta4 it contains is_floppy in getroot.c and not hostdisk.c. So most likely is that the user somehow had an older version (he could have manually installed it)

Comment 12 Mads Kiilerich 2012-06-02 13:51:04 UTC
(In reply to comment #11)

(Yes, the original report was using 1.99 without your fix 3425. Samuel claimed in comment 6 that the saw the same with beta4 - but didn't provide any evidence.)


Alexander, can you confirm that your issue has been solved with grub2 beta4 (or later)?

If anybody else can reproduce something similar with f17 final then please file a new issue.

Comment 13 Samuel Sieb 2012-06-02 14:49:51 UTC
My comment was actually about grub2-probe segfaulting which was a related issue and that has since been fixed.

Comment 14 Fedora End Of Life 2013-01-16 16:59:25 UTC
This message is a reminder that Fedora 16 is nearing its end of life.
Approximately 4 (four) weeks from now Fedora will stop maintaining
and issuing updates for Fedora 16. It is Fedora's policy to close all
bug reports from releases that are no longer maintained. At that time
this bug will be closed as WONTFIX if it remains open with a Fedora 
'version' of '16'.

Package Maintainer: If you wish for this bug to remain open because you
plan to fix it in a currently maintained version, simply change the 'version' 
to a later Fedora version prior to Fedora 16's end of life.

Bug Reporter: Thank you for reporting this issue and we are sorry that 
we may not be able to fix it before Fedora 16 is end of life. If you 
would still like to see this bug fixed and are able to reproduce it 
against a later version of Fedora, you are encouraged to click on 
"Clone This Bug" and open it against that version of Fedora.

Although we aim to fix as many bugs as possible during every release's 
lifetime, sometimes those efforts are overtaken by events. Often a 
more recent Fedora release includes newer upstream software that fixes 
bugs or makes them obsolete.

The process we are following is described here: 
http://fedoraproject.org/wiki/BugZappers/HouseKeeping

Comment 15 Fedora End Of Life 2013-02-13 21:15:46 UTC
Fedora 16 changed to end-of-life (EOL) status on 2013-02-12. Fedora 16 is 
no longer maintained, which means that it will not receive any further 
security or bug fix updates. As a result we are closing this bug.

If you can reproduce this bug against a currently maintained version of 
Fedora please feel free to reopen this bug against that version.

Thank you for reporting this bug and we are sorry it could not be fixed.


Note You need to log in before you can comment on or make changes to this bug.