From 60ef0e59eec139409dc7d19676533e1bfbd35662 Mon Sep 17 00:00:00 2001 From: Tokunori Ikegami Date: Tue, 28 Feb 2023 01:23:01 +0900 Subject: [PATCH] nvme: Align get feature data buffer length by page size to allocate Since a memory error caused by some features as data corrupted over length. Also the issue can be resolved by the change to align the data length. Signed-off-by: Tokunori Ikegami --- nvme.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/nvme.c b/nvme.c index b068a932..92261605 100644 --- a/nvme.c +++ b/nvme.c @@ -4502,6 +4502,8 @@ ret: static int get_feature_id(struct nvme_dev *dev, struct feat_cfg *cfg, void **buf, __u32 *result) { + size_t size; + if (!cfg->data_len) nvme_get_feature_length(cfg->feature_id, cfg->cdw11, &cfg->data_len); @@ -4519,10 +4521,11 @@ static int get_feature_id(struct nvme_dev *dev, struct feat_cfg *cfg, cfg->data_len = 0; if (cfg->data_len) { - if (posix_memalign(buf, getpagesize(), cfg->data_len)) { + /* rounding up size to page size */ + size = ((cfg->data_len - 1) / getpagesize() + 1) * getpagesize(); + if (posix_memalign(buf, getpagesize(), size)) return -1; - } - memset(*buf, 0, cfg->data_len); + memset(*buf, 0, size); } struct nvme_get_features_args args = { -- 2.50.1