| From 3c20cda944741212b237b91e67bf9e12e0614aa0 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Tue, 29 Aug 2023 10:07:57 -0500 |
| Subject: crypto: ccp - Fix DBC sample application error handling |
| |
| From: Mario Limonciello <mario.limonciello@amd.com> |
| |
| [ Upstream commit 70f242c1933e9e881c13c31640bb6d56e8b7e738 ] |
| |
| The sample application was taking values from ioctl() and treating |
| those as the error codes to present to a user. |
| |
| This is incorrect when ret is non-zero, the error is stored to `errno`. |
| Use this value instead. |
| |
| Fixes: f40d42f116cf ("crypto: ccp - Add a sample python script for Dynamic Boost Control") |
| Fixes: febe3ed3222f ("crypto: ccp - Add a sample library for ioctl use") |
| Signed-off-by: Mario Limonciello <mario.limonciello@amd.com> |
| Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| tools/crypto/ccp/dbc.c | 16 ++++++++-------- |
| tools/crypto/ccp/dbc.py | 3 +-- |
| 2 files changed, 9 insertions(+), 10 deletions(-) |
| |
| diff --git a/tools/crypto/ccp/dbc.c b/tools/crypto/ccp/dbc.c |
| index 37e813175642f..7774e981849fa 100644 |
| --- a/tools/crypto/ccp/dbc.c |
| +++ b/tools/crypto/ccp/dbc.c |
| @@ -8,6 +8,7 @@ |
| */ |
| |
| #include <assert.h> |
| +#include <errno.h> |
| #include <string.h> |
| #include <sys/ioctl.h> |
| |
| @@ -22,16 +23,14 @@ int get_nonce(int fd, void *nonce_out, void *signature) |
| struct dbc_user_nonce tmp = { |
| .auth_needed = !!signature, |
| }; |
| - int ret; |
| |
| assert(nonce_out); |
| |
| if (signature) |
| memcpy(tmp.signature, signature, sizeof(tmp.signature)); |
| |
| - ret = ioctl(fd, DBCIOCNONCE, &tmp); |
| - if (ret) |
| - return ret; |
| + if (ioctl(fd, DBCIOCNONCE, &tmp)) |
| + return errno; |
| memcpy(nonce_out, tmp.nonce, sizeof(tmp.nonce)); |
| |
| return 0; |
| @@ -47,7 +46,9 @@ int set_uid(int fd, __u8 *uid, __u8 *signature) |
| memcpy(tmp.uid, uid, sizeof(tmp.uid)); |
| memcpy(tmp.signature, signature, sizeof(tmp.signature)); |
| |
| - return ioctl(fd, DBCIOCUID, &tmp); |
| + if (ioctl(fd, DBCIOCUID, &tmp)) |
| + return errno; |
| + return 0; |
| } |
| |
| int process_param(int fd, int msg_index, __u8 *signature, int *data) |
| @@ -63,9 +64,8 @@ int process_param(int fd, int msg_index, __u8 *signature, int *data) |
| |
| memcpy(tmp.signature, signature, sizeof(tmp.signature)); |
| |
| - ret = ioctl(fd, DBCIOCPARAM, &tmp); |
| - if (ret) |
| - return ret; |
| + if (ioctl(fd, DBCIOCPARAM, &tmp)) |
| + return errno; |
| |
| *data = tmp.param; |
| return 0; |
| diff --git a/tools/crypto/ccp/dbc.py b/tools/crypto/ccp/dbc.py |
| index 3f6a825ffc9e4..3956efe7537ac 100644 |
| --- a/tools/crypto/ccp/dbc.py |
| +++ b/tools/crypto/ccp/dbc.py |
| @@ -27,8 +27,7 @@ lib = ctypes.CDLL("./dbc_library.so", mode=ctypes.RTLD_GLOBAL) |
| |
| |
| def handle_error(code): |
| - val = code * -1 |
| - raise OSError(val, os.strerror(val)) |
| + raise OSError(code, os.strerror(code)) |
| |
| |
| def get_nonce(device, signature): |
| -- |
| 2.42.0 |
| |