diff mbox series

[next] dm ioctl: rate limit a couple of ioctl based error messages

Message ID 20241024110431.1906858-1-colin.i.king@gmail.com (mailing list archive)
State New
Headers show
Series [next] dm ioctl: rate limit a couple of ioctl based error messages | expand

Commit Message

Colin King (gmail) Oct. 24, 2024, 11:04 a.m. UTC
It is possible to spam the kernel log with a misbehaving user process that
is passing incorrect dm ioctls to /dev/mapper/control. Use a rate limit
on these error messages to reduce the noise.

Signed-off-by: Colin Ian King <colin.i.king@gmail.com>
---
 drivers/md/dm-ioctl.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

Comments

Mikulas Patocka Oct. 24, 2024, 2:01 p.m. UTC | #1
Hi

I'd like to ask - have you experienced these errors? What was the process 
that triggered them? Was it some robot that tests syscalls with random 
parameters?

Mikulas


On Thu, 24 Oct 2024, Colin Ian King wrote:

> It is possible to spam the kernel log with a misbehaving user process that
> is passing incorrect dm ioctls to /dev/mapper/control. Use a rate limit
> on these error messages to reduce the noise.
> 
> Signed-off-by: Colin Ian King <colin.i.king@gmail.com>
> ---
>  drivers/md/dm-ioctl.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/md/dm-ioctl.c b/drivers/md/dm-ioctl.c
> index f299ff393a6a..d42eac944eb5 100644
> --- a/drivers/md/dm-ioctl.c
> +++ b/drivers/md/dm-ioctl.c
> @@ -1912,7 +1912,7 @@ static int check_version(unsigned int cmd, struct dm_ioctl __user *user,
>  
>  	if ((kernel_params->version[0] != DM_VERSION_MAJOR) ||
>  	    (kernel_params->version[1] > DM_VERSION_MINOR)) {
> -		DMERR("ioctl interface mismatch: kernel(%u.%u.%u), user(%u.%u.%u), cmd(%d)",
> +		DMERR_LIMIT("ioctl interface mismatch: kernel(%u.%u.%u), user(%u.%u.%u), cmd(%d)",
>  		      DM_VERSION_MAJOR, DM_VERSION_MINOR,
>  		      DM_VERSION_PATCHLEVEL,
>  		      kernel_params->version[0],
> @@ -1961,7 +1961,7 @@ static int copy_params(struct dm_ioctl __user *user, struct dm_ioctl *param_kern
>  
>  	if (unlikely(param_kernel->data_size < minimum_data_size) ||
>  	    unlikely(param_kernel->data_size > DM_MAX_TARGETS * DM_MAX_TARGET_PARAMS)) {
> -		DMERR("Invalid data size in the ioctl structure: %u",
> +		DMERR_LIMIT("Invalid data size in the ioctl structure: %u",
>  		      param_kernel->data_size);
>  		return -EINVAL;
>  	}
> -- 
> 2.39.5
>
Colin King (gmail) Oct. 24, 2024, 2:05 p.m. UTC | #2
On 24/10/2024 15:01, Mikulas Patocka wrote:
> Hi
> 
> I'd like to ask - have you experienced these errors? What was the process
> that triggered them? Was it some robot that tests syscalls with random
> parameters?

I hit this when running stress-ng's dev test, this exercises various 
ioctls for race conditions.  It's not a major issue, just a corner case 
found when I was running some stress tests.

Colin

> 
> Mikulas
> 
> 
> On Thu, 24 Oct 2024, Colin Ian King wrote:
> 
>> It is possible to spam the kernel log with a misbehaving user process that
>> is passing incorrect dm ioctls to /dev/mapper/control. Use a rate limit
>> on these error messages to reduce the noise.
>>
>> Signed-off-by: Colin Ian King <colin.i.king@gmail.com>
>> ---
>>   drivers/md/dm-ioctl.c | 4 ++--
>>   1 file changed, 2 insertions(+), 2 deletions(-)
>>
>> diff --git a/drivers/md/dm-ioctl.c b/drivers/md/dm-ioctl.c
>> index f299ff393a6a..d42eac944eb5 100644
>> --- a/drivers/md/dm-ioctl.c
>> +++ b/drivers/md/dm-ioctl.c
>> @@ -1912,7 +1912,7 @@ static int check_version(unsigned int cmd, struct dm_ioctl __user *user,
>>   
>>   	if ((kernel_params->version[0] != DM_VERSION_MAJOR) ||
>>   	    (kernel_params->version[1] > DM_VERSION_MINOR)) {
>> -		DMERR("ioctl interface mismatch: kernel(%u.%u.%u), user(%u.%u.%u), cmd(%d)",
>> +		DMERR_LIMIT("ioctl interface mismatch: kernel(%u.%u.%u), user(%u.%u.%u), cmd(%d)",
>>   		      DM_VERSION_MAJOR, DM_VERSION_MINOR,
>>   		      DM_VERSION_PATCHLEVEL,
>>   		      kernel_params->version[0],
>> @@ -1961,7 +1961,7 @@ static int copy_params(struct dm_ioctl __user *user, struct dm_ioctl *param_kern
>>   
>>   	if (unlikely(param_kernel->data_size < minimum_data_size) ||
>>   	    unlikely(param_kernel->data_size > DM_MAX_TARGETS * DM_MAX_TARGET_PARAMS)) {
>> -		DMERR("Invalid data size in the ioctl structure: %u",
>> +		DMERR_LIMIT("Invalid data size in the ioctl structure: %u",
>>   		      param_kernel->data_size);
>>   		return -EINVAL;
>>   	}
>> -- 
>> 2.39.5
>>
>
diff mbox series

Patch

diff --git a/drivers/md/dm-ioctl.c b/drivers/md/dm-ioctl.c
index f299ff393a6a..d42eac944eb5 100644
--- a/drivers/md/dm-ioctl.c
+++ b/drivers/md/dm-ioctl.c
@@ -1912,7 +1912,7 @@  static int check_version(unsigned int cmd, struct dm_ioctl __user *user,
 
 	if ((kernel_params->version[0] != DM_VERSION_MAJOR) ||
 	    (kernel_params->version[1] > DM_VERSION_MINOR)) {
-		DMERR("ioctl interface mismatch: kernel(%u.%u.%u), user(%u.%u.%u), cmd(%d)",
+		DMERR_LIMIT("ioctl interface mismatch: kernel(%u.%u.%u), user(%u.%u.%u), cmd(%d)",
 		      DM_VERSION_MAJOR, DM_VERSION_MINOR,
 		      DM_VERSION_PATCHLEVEL,
 		      kernel_params->version[0],
@@ -1961,7 +1961,7 @@  static int copy_params(struct dm_ioctl __user *user, struct dm_ioctl *param_kern
 
 	if (unlikely(param_kernel->data_size < minimum_data_size) ||
 	    unlikely(param_kernel->data_size > DM_MAX_TARGETS * DM_MAX_TARGET_PARAMS)) {
-		DMERR("Invalid data size in the ioctl structure: %u",
+		DMERR_LIMIT("Invalid data size in the ioctl structure: %u",
 		      param_kernel->data_size);
 		return -EINVAL;
 	}