Patch for proc w/ no supplementary groups

From: Paul H. Hargrove (PHHargrove_at_lbl_dot_gov)
Date: Mon Aug 11 2008 - 11:34:42 PDT

  • Next message: Paul H. Hargrove: "Announcing the release of BLCR 0.7.2."
    It seems the ENOMEM problem reported by Manish Dwivedi recently is due to 
    having zero supplementary group ids.  When BLCR goes to save the group ids, 
    this results in vmalloc(0) which rightly returns NULL.  BLCR, however, 
    interprets the NULL return as an out of memory condition.  Mukti Jain has 
    observed that the same exists on the corresponding restore path.
    
    Attached is a patch that should resolve these problems (works in my limited 
    testing).
    
    I had planned to release 0.7.3 today, but will probably delay that until I've 
    gotten confirmation from Manish and/or Mukti that this patch solves the 
    problem, or until somebody finds a problem with this patch.
    
    -Paul
    
    -- 
    Paul H. Hargrove                          PHHargrove_at_lbl_dot_gov
    Future Technologies Group
    HPC Research Department                   Tel: +1-510-495-2352
    Lawrence Berkeley National Laboratory     Fax: +1-510-486-6900
    
    Index: cr_module/cr_dump_self.c
    ===================================================================
    RCS file: /var/local/cvs/lbnl_cr/cr_module/cr_dump_self.c,v
    retrieving revision 1.202.2.5
    diff -u -r1.202.2.5 cr_dump_self.c
    --- cr_module/cr_dump_self.c	26 Jun 2008 00:05:42 -0000	1.202.2.5
    +++ cr_module/cr_dump_self.c	11 Aug 2008 18:22:40 -0000
    @@ -819,7 +819,7 @@
             }
     
     #if HAVE_TASK_GROUP_INFO
    -        {
    +        if (sizeof_groups != 0) {
                 /* copy current->groups into an array and write it out */
                 int i;
                 gid_t *groups;
    Index: cr_module/cr_rstrt_req.c
    ===================================================================
    RCS file: /var/local/cvs/lbnl_cr/cr_module/cr_rstrt_req.c,v
    retrieving revision 1.292.2.8
    diff -u -r1.292.2.8 cr_rstrt_req.c
    --- cr_module/cr_rstrt_req.c	5 Aug 2008 00:39:59 -0000	1.292.2.8
    +++ cr_module/cr_rstrt_req.c	11 Aug 2008 18:22:40 -0000
    @@ -144,8 +144,7 @@
     {
         struct cr_context_creds cf_creds;
         int retval;
    -    gid_t *groups;
    -    size_t sizeof_groups;
    +    gid_t *groups = NULL;
     
         retval = cr_kread(proc_req->file, &cf_creds, sizeof(cf_creds));
         if (retval < sizeof(cf_creds)) {
    @@ -162,20 +161,21 @@
     	CR_ERR("Invalid supplemental group count (%d)", (int)cf_creds.ngroups);
     	retval = -EINVAL;
     	goto out;
    -    }
    +    } else if (cf_creds.ngroups) {
    +	size_t sizeof_groups = cf_creds.ngroups*sizeof(gid_t);
    +	groups = vmalloc(sizeof_groups);
    +	retval = -ENOMEM;
    +	if (groups == NULL) {
    +	    goto out;
    +	}
     
    -    sizeof_groups = cf_creds.ngroups*sizeof(gid_t);
    -    groups = vmalloc(sizeof_groups);
    -    retval = -ENOMEM;
    -    if (groups == NULL) {
    -	goto out;
    +	retval = cr_kread(proc_req->file, groups, sizeof_groups);
    +	if (retval < sizeof_groups) {
    +	    CR_ERR("groups: read returned %d", retval);
    +            goto out_vfree;
    +	}
         }
     
    -    retval = cr_kread(proc_req->file, groups, sizeof_groups);
    -    if (retval < sizeof_groups) {
    -	CR_ERR("groups: read returned %d", retval);
    -        goto out_vfree;
    -    }
     
     #if CR_RESTORE_IDS
         {
    

  • Next message: Paul H. Hargrove: "Announcing the release of BLCR 0.7.2."