On Tue, Dec 4, 2018 at 7:41 AM Sebastian Andrzej Siewior <bigeasy@xxxxxxxxxxxxx> wrote: > > On 2018-11-30 14:47:36 [-0800], Kees Cook wrote: > > diff --git a/drivers/firmware/efi/efi-pstore.c b/drivers/firmware/efi/efi-pstore.c > > index cfe87b465819..0f7d97917197 100644 > > --- a/drivers/firmware/efi/efi-pstore.c > > +++ b/drivers/firmware/efi/efi-pstore.c > > @@ -259,8 +259,7 @@ static int efi_pstore_write(struct pstore_record *record) > > efi_name[i] = name[i]; > > > > ret = efivar_entry_set_safe(efi_name, vendor, PSTORE_EFI_ATTRIBUTES, > > - !pstore_cannot_block_path(record->reason), > > - record->size, record->psi->buf); > > + preemptible(), record->size, record->psi->buf); > > Well. Better I think. > might_sleep() / preempt_count_equals() checks for preemptible() + rcu_preempt_depth(). > kmsg_dump() starts with rcu_read_lock() which means with this patch applied I > got: Okay, so, if kmsg_dump() uses rcu_read_lock(), that means efi-pstore can _never_ sleep, and it's nothing to do with pstore internals. :( I guess we just hard-code it, then? And efi-pstore should probably only attach to pstore if it has a nonblock implementation (and warn if one isn't available). -Kees -- Kees Cook