diff options
-rw-r--r-- | src/responder/nss/nsssrv_mmap_cache.c | 3 | ||||
-rw-r--r-- | src/util/mmap_cache.h | 6 |
2 files changed, 7 insertions, 2 deletions
diff --git a/src/responder/nss/nsssrv_mmap_cache.c b/src/responder/nss/nsssrv_mmap_cache.c index 7149ca80..f72923ea 100644 --- a/src/responder/nss/nsssrv_mmap_cache.c +++ b/src/responder/nss/nsssrv_mmap_cache.c @@ -226,8 +226,7 @@ static bool sss_mc_is_valid_rec(struct sss_mc_ctx *mcc, struct sss_mc_rec *rec) return false; } - if ((rec->len == MC_INVALID_VAL32) || - (rec->len > (mcc->dt_size - ((uint8_t *)rec - mcc->data_table)))) { + if (!MC_CHECK_RECORD_LENGTH(mcc, rec)) { return false; } diff --git a/src/util/mmap_cache.h b/src/util/mmap_cache.h index 407eeea6..1f99c758 100644 --- a/src/util/mmap_cache.h +++ b/src/util/mmap_cache.h @@ -70,6 +70,12 @@ typedef uint32_t rel_ptr_t; #define MC_VALID_BARRIER(val) (((val) & 0xff000000) == 0xf0000000) +#define MC_CHECK_RECORD_LENGTH(mc_ctx, rec) \ + ((rec)->len >= MC_HEADER_SIZE && (rec)->len != MC_INVALID_VAL32 \ + && ((rec)->len <= ((mc_ctx)->dt_size \ + - MC_PTR_DIFF(rec, (mc_ctx)->data_table)))) + + #define SSS_MC_MAJOR_VNO 0 #define SSS_MC_MINOR_VNO 4 |