From: Kefu Chai Date: Tue, 29 Jun 2021 06:43:57 +0000 (+0800) Subject: crimson/osd: check invalid input in do_xattr_cmp_u64() X-Git-Tag: v17.1.0~1517^2~2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=f39d71ecaa90137ab7cc310d09a06c26cb6b2335;p=ceph.git crimson/osd: check invalid input in do_xattr_cmp_u64() we should return -EINVAL if the string does not represent a decimal integer. Signed-off-by: Kefu Chai --- diff --git a/src/crimson/osd/pg_backend.cc b/src/crimson/osd/pg_backend.cc index 4ad9ac2fd921..4fd9cf994a91 100644 --- a/src/crimson/osd/pg_backend.cc +++ b/src/crimson/osd/pg_backend.cc @@ -862,7 +862,11 @@ static int do_xattr_cmp_u64(int op, uint64_t lhs, bufferlist& rhs_xattr) uint64_t rhs; if (rhs_xattr.length() > 0) { - std::from_chars(rhs_xattr.c_str(), rhs_xattr.c_str() + rhs_xattr.length(), rhs); + const char* first = rhs_xattr.c_str(); + if (auto [p, ec] = std::from_chars(first, first + rhs_xattr.length(), rhs); + ec != std::errc()) { + return -EINVAL; + } } else { rhs = 0; }