Possibly.

cc'ing yasuoka who helped me with this method of disk probing.

But anyways, beyond a code review we need someone to SHOW THEIR BOOT LOADER
OUTPUT, so that we can see the hibernate marker letter is missing.

> (First sorry for the thread break, I have some problems in receiving
> mails actually.)
> 
> I dig a bit inside the code of bootloader, and I think it is possible
> that the bootloader is unable to see hibernate signature when FDE is in
> use.
> 
> Taking boot(bootdev) as entrypoint (stand/boot/boot.c +60):
> 
> it calls machdep() (arch/amd64/stand/libsa/machdep.c +48)
> and call each probe routines.
> 
> In the list of probe routines, there is diskprobe()
> (arch/amd64/stand/libsa/diskprobe.c +246), which call:
> 
>  - hardprobe() (line 122),
>  - and only after sr_probe() (line 270)
> 
> It is hardprobe() that will call check_hibernate():
> 
>   - allocating dip struct
>   - running check_hibernate() to set BDI_HIBVALID if HIBERNATE_MAGIC is
>     found.
> 
> To read the value, it uses dip->strategy() function.
> 
> arch/amd64/stand/libsa/diskprobe.c
>    491          error = dip->strategy(dip, F_READ, (daddr32_t)sec, sizeof 
> hib, &hib, NULL);
>    492          if (error == 0 && hib.magic == HIBERNATE_MAGIC) {
>    493                  /* Hibernate present */
>    494                  dip->bios_info.flags |= BDI_HIBVALID;
>    495                  printf("&");
>    496          }
> 
> the actual code is biosstrategy() (arch/amd64/stand/libsa/biosdev.c +722)
> which will call sr_strategy() if dip->sr_vol is not NULL.
> 
> arch/amd64/stand/libsa/biosdev.c
>    721          /* Intercept strategy for softraid volumes. */
>    722          if (dip->sr_vol)
>    723                  return sr_strategy(dip->sr_vol, rw, blk, size, buf, 
> rsize);
> 
> 
> If I correctly understood the code, dip->sr_vol is initialized on first
> biosopen() call. But at this point, we didn't call it. Additionally,
> sr_probe() isn't called either.
> 
> So dip->strategy() will read the encrypted data and not decrypted one,
> so it is unable to found HIBERNATE_MAGIC (as it is encrypted).
> 
> Thanks.
> -- 
> Sebastien Marie

Reply via email to