From: Sathyanarayanan Kuppuswamy <sathyanarayanan.kuppuswamy@linux.intel.com> To: Hans de Goede <hdegoede@redhat.com>, Thomas Gleixner <tglx@linutronix.de>, Ingo Molnar <mingo@redhat.com>, Borislav Petkov <bp@alien8.de>, Dave Hansen <dave.hansen@linux.intel.com>, x86@kernel.org, Mark Gross <mgross@linux.intel.com> Cc: "H . Peter Anvin" <hpa@zytor.com>, "Kirill A . Shutemov" <kirill.shutemov@linux.intel.com>, Tony Luck <tony.luck@intel.com>, Andi Kleen <ak@linux.intel.com>, linux-kernel@vger.kernel.org, platform-driver-x86@vger.kernel.org Subject: Re: [PATCH v2 5/6] platform/x86: intel_tdx_attest: Add TDX Guest attestation interface driver Date: Mon, 4 Apr 2022 12:56:35 -0700 [thread overview] Message-ID: <aece84e1-2c90-2c18-993a-96f8fed7bb46@linux.intel.com> (raw) In-Reply-To: <8308a830-3096-3f94-4f12-5fd2c290524e@redhat.com> Hi Hans, On 4/4/22 3:07 AM, Hans de Goede wrote: >> +static int __init tdx_attest_init(void) >> +{ >> + dma_addr_t handle; >> + long ret = 0; >> + >> + mutex_lock(&attestation_lock); >> + >> + ret = misc_register(&tdx_attest_device); >> + if (ret) { >> + pr_err("misc device registration failed\n"); >> + mutex_unlock(&attestation_lock); >> + return ret; >> + } > Why not do this as the last thing of the probe? We need misc device reference in dma_alloc_coherent() and dma_set_coherent_mask() calls. This is the reason for keeping misc_register() at the beginining of the init function. > > That will avoid the need to unregister this again in all > the error-exit paths and also fixes a possible deadlock. > Agree. But, unless we create another device locally, I don't think we can avoid this. Do you prefer this approach? > Right now you possibly have: > > 1. probe() locks attestation_lock > 2. probe() registers misc-device > 3. userspace calls tdx_attest_ioctl > 4. tdx_attest_ioctl blocks waiting for attestastion_lock > 5. Something goes wrong in probe, probe calls > misc_deregister() > 6. misc_deregister waits for the ioctl to finish > 7. deadlock > > I'm not sure about 6, but if 6 does not happen then > instead we now have tdx_attest_ioctl running > after the misc_deregister, with tdquote_data and > tdreport_data as NULL, or pointing to free-ed memory > leading to various crash scenarios. Makes sense. But as I have mentioned above, we have reason for keeping the misc_register() at the begining of the init function. One way to avoid this deadlock is to use global initalization check. --- a/drivers/platform/x86/intel/tdx/intel_tdx_attest.c +++ b/drivers/platform/x86/intel/tdx/intel_tdx_attest.c @@ -48,6 +48,8 @@ static void *tdreport_data; /* DMA handle used to allocate and free tdquote DMA buffer */ dma_addr_t tdquote_dma_handle; +static bool device_initialized; + static void attestation_callback_handler(void) { complete(&attestation_done); @@ -60,6 +62,9 @@ static long tdx_attest_ioctl(struct file *file, unsigned int cmd, struct tdx_gen_quote tdquote_req; long ret = 0; + if (!device_initialized) + return -ENODEV; + mutex_lock(&attestation_lock); switch (cmd) { @@ -191,6 +196,8 @@ static int __init tdx_attest_init(void) mutex_unlock(&attestation_lock); + device_initialized = true; + pr_debug("module initialization success\n"); return 0; Please let me know your comment on above solution. > > TL;DR: you must always delay registering any > interfaces for userspace until your code is > ready to deal with userspace calls. > > Regards, > > Hans > > p.s. > > As I mentioned with v1: > > -- Sathyanarayanan Kuppuswamy Linux Kernel Developer
next prev parent reply other threads:[~2022-04-04 21:23 UTC|newest] Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top 2022-03-30 22:17 [PATCH v2 0/6] Add TDX Guest Attestation support Kuppuswamy Sathyanarayanan 2022-03-30 22:18 ` [PATCH v2 1/6] x86/tdx: Add tdx_mcall_tdreport() API support Kuppuswamy Sathyanarayanan 2022-03-30 22:18 ` [PATCH v2 2/6] x86/tdx: Add tdx_hcall_get_quote() " Kuppuswamy Sathyanarayanan 2022-03-31 1:55 ` Aubrey Li 2022-03-30 22:18 ` [PATCH v2 3/6] x86/tdx: Add SetupEventNotifyInterrupt TDX hypercall support Kuppuswamy Sathyanarayanan 2022-03-30 22:18 ` [PATCH v2 4/6] x86/tdx: Add TDX Guest event notify interrupt vector support Kuppuswamy Sathyanarayanan 2022-03-30 22:18 ` [PATCH v2 5/6] platform/x86: intel_tdx_attest: Add TDX Guest attestation interface driver Kuppuswamy Sathyanarayanan 2022-04-04 10:07 ` Hans de Goede 2022-04-04 19:56 ` Sathyanarayanan Kuppuswamy [this message] 2022-04-11 14:38 ` Hans de Goede 2022-04-04 10:09 ` Hans de Goede 2022-04-04 10:11 ` Hans de Goede 2022-03-30 22:18 ` [PATCH v2 6/6] tools/tdx: Add a sample attestation user app Kuppuswamy Sathyanarayanan -- strict thread matches above, loose matches on Subject: below -- 2021-07-07 20:42 [PATCH v2 0/6] Add TDX Guest Support (Attestation support) Kuppuswamy Sathyanarayanan 2021-07-07 20:42 ` [PATCH v2 5/6] platform/x86: intel_tdx_attest: Add TDX Guest attestation interface driver Kuppuswamy Sathyanarayanan 2021-07-08 22:21 ` Andy Lutomirski 2021-07-08 22:35 ` Dave Hansen 2021-07-09 0:38 ` Andi Kleen 2021-07-13 0:33 ` Kuppuswamy, Sathyanarayanan 2021-07-13 0:44 ` Dave Hansen 2021-07-08 23:34 ` Kuppuswamy, Sathyanarayanan 2021-07-08 23:36 ` Dan Williams 2021-07-08 23:57 ` Kuppuswamy, Sathyanarayanan 2021-07-09 0:20 ` Dan Williams 2021-07-09 0:36 ` Andi Kleen 2021-07-09 1:37 ` Dan Williams 2021-07-09 1:44 ` Andi Kleen 2021-07-09 2:04 ` Dan Williams 2021-07-09 2:43 ` Kuppuswamy, Sathyanarayanan
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=aece84e1-2c90-2c18-993a-96f8fed7bb46@linux.intel.com \ --to=sathyanarayanan.kuppuswamy@linux.intel.com \ --cc=ak@linux.intel.com \ --cc=bp@alien8.de \ --cc=dave.hansen@linux.intel.com \ --cc=hdegoede@redhat.com \ --cc=hpa@zytor.com \ --cc=kirill.shutemov@linux.intel.com \ --cc=linux-kernel@vger.kernel.org \ --cc=mgross@linux.intel.com \ --cc=mingo@redhat.com \ --cc=platform-driver-x86@vger.kernel.org \ --cc=tglx@linutronix.de \ --cc=tony.luck@intel.com \ --cc=x86@kernel.org \ --subject='Re: [PATCH v2 5/6] platform/x86: intel_tdx_attest: Add TDX Guest attestation interface driver' \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.