diff options
| author | Luben Tuikov <luben.tuikov@amd.com> | 2021-04-13 07:49:11 -0400 | 
|---|---|---|
| committer | Alex Deucher <alexander.deucher@amd.com> | 2021-04-15 16:32:44 -0400 | 
| commit | 6cb7a1d40acb2425b9dabb99cdaf522bf47295cb (patch) | |
| tree | 6b6fd7a81ac1c662bc4519f9c8563aa5d6185989 /drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c | |
| parent | b45fdeab45bc42c2cd2dfbb3d11a3dd797907af6 (diff) | |
drm/amdgpu: Fix a bug for input with double sscanf
Remove double-sscanf to scan for %llu and 0x%llx,
as that is not going to work!
The %llu will consume the "0" in "0x" of your
input, and the hex value you think you're entering
will always be 0. That is, a valid hex value can
never be consumed.
On the other hand, just entering a hex number
without leading 0x will either be scanned as a
string and not match, for instance FAB123, or
the leading decimal portion is scanned as the
%llu, for instance 123FAB will be scanned as 123,
which is not correct.
Thus remove the first %llu scan and leave only the
%llx scan, removing the leading 0x since %llx can
scan either.
Addresses are usually always hex values, so this
suffices.
Cc: Alexander Deucher <Alexander.Deucher@amd.com>
Cc: Xinhui Pan <xinhui.pan@amd.com>
Cc: Hawking Zhang <Hawking.Zhang@amd.com>
Signed-off-by: Luben Tuikov <luben.tuikov@amd.com>
Reviewed-by: Hawking Zhang <Hawking.Zhang@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c')
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c | 13 | 
1 files changed, 5 insertions, 8 deletions
| diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c index 0541196ae1ed..9041453465f1 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c @@ -230,9 +230,8 @@ static int amdgpu_ras_debugfs_ctrl_parse_data(struct file *f,  	if (op != -1) {  		if (op == 3) { -			if (sscanf(str, "%*s %llu", &address) != 1) -				if (sscanf(str, "%*s 0x%llx", &address) != 1) -					return -EINVAL; +			if (sscanf(str, "%*s %llx", &address) != 1) +				return -EINVAL;  			data->op = op;  			data->inject.address = address; @@ -255,11 +254,9 @@ static int amdgpu_ras_debugfs_ctrl_parse_data(struct file *f,  		data->op = op;  		if (op == 2) { -			if (sscanf(str, "%*s %*s %*s %u %llu %llu", -						&sub_block, &address, &value) != 3) -				if (sscanf(str, "%*s %*s %*s 0x%x 0x%llx 0x%llx", -							&sub_block, &address, &value) != 3) -					return -EINVAL; +			if (sscanf(str, "%*s %*s %*s %x %llx %llx", +				   &sub_block, &address, &value) != 3) +				return -EINVAL;  			data->head.sub_block_index = sub_block;  			data->inject.address = address;  			data->inject.value = value; | 
