diff options
Diffstat (limited to 'src/sss_client/nss_mc_group.c')
-rw-r--r-- | src/sss_client/nss_mc_group.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/src/sss_client/nss_mc_group.c b/src/sss_client/nss_mc_group.c index 5610233ed..fb5e43f84 100644 --- a/src/sss_client/nss_mc_group.c +++ b/src/sss_client/nss_mc_group.c @@ -27,6 +27,7 @@ #include <sys/mman.h> #include <time.h> #include "nss_mc.h" +#include "util/util_safealign.h" struct sss_cli_mc_ctx gr_mc_ctx = { false, -1, 0, NULL, 0, NULL, 0, NULL, 0 }; @@ -64,7 +65,14 @@ static errno_t sss_nss_mc_parse_result(struct sss_mc_rec *rec, /* fill in group */ result->gr_gid = data->gid; - result->gr_mem = (char **)buffer; + + /* The address &buffer[0] must be aligned to sizeof(char *) */ + if (!IS_ALIGNED(buffer, char *)) { + /* The buffer is not properly aligned. */ + return EFAULT; + } + + result->gr_mem = (char **)DISCARD_ALIGN(buffer); result->gr_mem[data->members] = NULL; cookie = NULL; |