From 275f0c341cba262ebf07aa708874456f74518811 Mon Sep 17 00:00:00 2001 From: Konrad Sztyber Date: Fri, 17 May 2019 14:38:59 +0200 Subject: [PATCH] blobfs: removed unaligned memory access Replaced (uint64_t *) dereference of (char *) variable with memcpy to avoid unaligned memory access. It fixes the following error reported by ubsan: spdk/lib/blobfs/blobfs.c:1492:2: runtime error: load of misaligned address 0x00000047a136 for type 'uint64_t', which requires 8 byte alignment Change-Id: I5f3f28a52b8cbe3eb30394ae7ebd0e64b683db57 Signed-off-by: Konrad Sztyber Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/454886 Tested-by: SPDK CI Jenkins Reviewed-by: Darek Stojaczyk Reviewed-by: Paul Luse Reviewed-by: Jim Harris --- lib/blobfs/blobfs.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/lib/blobfs/blobfs.c b/lib/blobfs/blobfs.c index 343f139f6..1c8695ba4 100644 --- a/lib/blobfs/blobfs.c +++ b/lib/blobfs/blobfs.c @@ -1473,13 +1473,21 @@ spdk_fs_delete_file_async(struct spdk_filesystem *fs, const char *name, spdk_bs_delete_blob(fs->bs, blobid, blob_delete_cb, req); } +static uint64_t +fs_name_to_uint64(const char *name) +{ + uint64_t result = 0; + memcpy(&result, name, spdk_min(sizeof(result), strlen(name))); + return result; +} + static void __fs_delete_file_done(void *arg, int fserrno) { struct spdk_fs_request *req = arg; struct spdk_fs_cb_args *args = &req->args; - spdk_trace_record(TRACE_BLOBFS_DELETE_DONE, 0, 0, 0, *((uint64_t *)args->op.delete.name)); + spdk_trace_record(TRACE_BLOBFS_DELETE_DONE, 0, 0, 0, fs_name_to_uint64(args->op.delete.name)); __wake_caller(args, fserrno); } @@ -1489,7 +1497,7 @@ __fs_delete_file(void *arg) struct spdk_fs_request *req = arg; struct spdk_fs_cb_args *args = &req->args; - spdk_trace_record(TRACE_BLOBFS_DELETE_START, 0, 0, 0, *((uint64_t *)args->op.delete.name)); + spdk_trace_record(TRACE_BLOBFS_DELETE_START, 0, 0, 0, fs_name_to_uint64(args->op.delete.name)); spdk_fs_delete_file_async(args->fs, args->op.delete.name, __fs_delete_file_done, req); }