diff mbox series

drm/amdgpu/virt: don't dereference undefined 'module' struct

Message ID 20171102112619.72157-1-arnd@arndb.de
State Accepted
Commit e477e940dad1836c6f6d23353e424665b9316b6e
Headers show
Series drm/amdgpu/virt: don't dereference undefined 'module' struct | expand

Commit Message

Arnd Bergmann Nov. 2, 2017, 11:25 a.m. UTC
Accessing the THIS_MODULE directly is only possible when modules
are enabled, otherwise we get a build failure:

drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c: In function 'amdgpu_virt_init_data_exchange':
drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c:331:20: error: dereferencing pointer to incomplete type 'struct module'

Further, THIS_MODULE is NULL when the driver is built-in, so the
code would likely cause a NULL pointer dereference.

This adds an #ifdef check to avoid the compile-time error, plus
a NULL pointer check before dereferencing THIS_MODULE. It might
be better to find a way to avoid using the module version
altogether.

Fixes: 2dc8f81e4f82 ("drm/amdgpu: SR-IOV data exchange between PF&VF")
Signed-off-by: Arnd Bergmann <arnd@arndb.de>

---
 drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c | 2 ++
 1 file changed, 2 insertions(+)

-- 
2.9.0

Comments

Harry Wentland Nov. 2, 2017, 7:22 p.m. UTC | #1
On 2017-11-02 07:25 AM, Arnd Bergmann wrote:
> Accessing the THIS_MODULE directly is only possible when modules

> are enabled, otherwise we get a build failure:

> 

> drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c: In function 'amdgpu_virt_init_data_exchange':

> drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c:331:20: error: dereferencing pointer to incomplete type 'struct module'

> 

> Further, THIS_MODULE is NULL when the driver is built-in, so the

> code would likely cause a NULL pointer dereference.

> 

> This adds an #ifdef check to avoid the compile-time error, plus

> a NULL pointer check before dereferencing THIS_MODULE. It might

> be better to find a way to avoid using the module version

> altogether.

> 

> Fixes: 2dc8f81e4f82 ("drm/amdgpu: SR-IOV data exchange between PF&VF")

> Signed-off-by: Arnd Bergmann <arnd@arndb.de>


Looks like 'str' isn't even used here.

Either way, this change by itself is correct and
Reviewed-by: Harry Wentland <harry.wentland@amd.com>


Harry

> ---

>  drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c | 2 ++

>  1 file changed, 2 insertions(+)

> 

> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c

> index e97f80f86005..4e4a476593e8 100644

> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c

> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c

> @@ -328,9 +328,11 @@ void amdgpu_virt_init_data_exchange(struct amdgpu_device *adev)

>  					sizeof(amdgim_vf2pf_info));

>  				AMDGPU_FW_VRAM_VF2PF_READ(adev, driver_version,

>  					&str);

> +#ifdef MODULE

>  				if (THIS_MODULE->version != NULL)

>  					strcpy(str, THIS_MODULE->version);

>  				else

> +#endif

>  					strcpy(str, "N/A");

>  				AMDGPU_FW_VRAM_VF2PF_WRITE(adev, driver_cert,

>  					0);

>
Alex Deucher Nov. 2, 2017, 8:57 p.m. UTC | #2
On Thu, Nov 2, 2017 at 3:22 PM, Harry Wentland <harry.wentland@amd.com> wrote:
> On 2017-11-02 07:25 AM, Arnd Bergmann wrote:

>> Accessing the THIS_MODULE directly is only possible when modules

>> are enabled, otherwise we get a build failure:

>>

>> drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c: In function 'amdgpu_virt_init_data_exchange':

>> drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c:331:20: error: dereferencing pointer to incomplete type 'struct module'

>>

>> Further, THIS_MODULE is NULL when the driver is built-in, so the

>> code would likely cause a NULL pointer dereference.

>>

>> This adds an #ifdef check to avoid the compile-time error, plus

>> a NULL pointer check before dereferencing THIS_MODULE. It might

>> be better to find a way to avoid using the module version

>> altogether.

>>

>> Fixes: 2dc8f81e4f82 ("drm/amdgpu: SR-IOV data exchange between PF&VF")

>> Signed-off-by: Arnd Bergmann <arnd@arndb.de>

>

> Looks like 'str' isn't even used here.

>

> Either way, this change by itself is correct and

> Reviewed-by: Harry Wentland <harry.wentland@amd.com>

>


Applied.  Thanks!

Alex

> Harry

>

>> ---

>>  drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c | 2 ++

>>  1 file changed, 2 insertions(+)

>>

>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c

>> index e97f80f86005..4e4a476593e8 100644

>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c

>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c

>> @@ -328,9 +328,11 @@ void amdgpu_virt_init_data_exchange(struct amdgpu_device *adev)

>>                                       sizeof(amdgim_vf2pf_info));

>>                               AMDGPU_FW_VRAM_VF2PF_READ(adev, driver_version,

>>                                       &str);

>> +#ifdef MODULE

>>                               if (THIS_MODULE->version != NULL)

>>                                       strcpy(str, THIS_MODULE->version);

>>                               else

>> +#endif

>>                                       strcpy(str, "N/A");

>>                               AMDGPU_FW_VRAM_VF2PF_WRITE(adev, driver_cert,

>>                                       0);

>>

> _______________________________________________

> amd-gfx mailing list

> amd-gfx@lists.freedesktop.org

> https://lists.freedesktop.org/mailman/listinfo/amd-gfx
Yu, Xiangliang Nov. 3, 2017, 6:57 a.m. UTC | #3
Reviewed-By: Xiangliang Yu <Xiangliang.Yu@amd.com>


Thanks!

> -----Original Message-----

> From: Arnd Bergmann [mailto:arnd@arndb.de]

> Sent: Thursday, November 02, 2017 7:26 PM

> To: Deucher, Alexander <Alexander.Deucher@amd.com>; Koenig, Christian

> <Christian.Koenig@amd.com>

> Cc: Arnd Bergmann <arnd@arndb.de>; David Airlie <airlied@linux.ie>; Liu,

> Monk <Monk.Liu@amd.com>; Yu, Xiangliang <Xiangliang.Yu@amd.com>;

> Chen, Horace <Horace.Chen@amd.com>; amd-gfx@lists.freedesktop.org;

> dri-devel@lists.freedesktop.org; linux-kernel@vger.kernel.org

> Subject: [PATCH] drm/amdgpu/virt: don't dereference undefined 'module'

> struct

> 

> Accessing the THIS_MODULE directly is only possible when modules are

> enabled, otherwise we get a build failure:

> 

> drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c: In function

> 'amdgpu_virt_init_data_exchange':

> drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c:331:20: error: dereferencing

> pointer to incomplete type 'struct module'

> 

> Further, THIS_MODULE is NULL when the driver is built-in, so the code would

> likely cause a NULL pointer dereference.

> 

> This adds an #ifdef check to avoid the compile-time error, plus a NULL

> pointer check before dereferencing THIS_MODULE. It might be better to find

> a way to avoid using the module version altogether.

> 

> Fixes: 2dc8f81e4f82 ("drm/amdgpu: SR-IOV data exchange between PF&VF")

> Signed-off-by: Arnd Bergmann <arnd@arndb.de>

> ---

>  drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c | 2 ++

>  1 file changed, 2 insertions(+)

> 

> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c

> b/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c

> index e97f80f86005..4e4a476593e8 100644

> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c

> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c

> @@ -328,9 +328,11 @@ void amdgpu_virt_init_data_exchange(struct

> amdgpu_device *adev)

>  					sizeof(amdgim_vf2pf_info));

>  				AMDGPU_FW_VRAM_VF2PF_READ(adev,

> driver_version,

>  					&str);

> +#ifdef MODULE

>  				if (THIS_MODULE->version != NULL)

>  					strcpy(str, THIS_MODULE->version);

>  				else

> +#endif

>  					strcpy(str, "N/A");

>  				AMDGPU_FW_VRAM_VF2PF_WRITE(adev,

> driver_cert,

>  					0);

> --

> 2.9.0
diff mbox series

Patch

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c
index e97f80f86005..4e4a476593e8 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c
@@ -328,9 +328,11 @@  void amdgpu_virt_init_data_exchange(struct amdgpu_device *adev)
 					sizeof(amdgim_vf2pf_info));
 				AMDGPU_FW_VRAM_VF2PF_READ(adev, driver_version,
 					&str);
+#ifdef MODULE
 				if (THIS_MODULE->version != NULL)
 					strcpy(str, THIS_MODULE->version);
 				else
+#endif
 					strcpy(str, "N/A");
 				AMDGPU_FW_VRAM_VF2PF_WRITE(adev, driver_cert,
 					0);