/mandos/trunk

To get this branch, use:
bzr branch http://bzr.recompile.se/loggerhead/mandos/trunk

« back to all changes in this revision

Viewing changes to plugins.d/plymouth.c

  • Committer: Teddy Hogeborn
  • Date: 2018-01-29 19:21:23 UTC
  • Revision ID: teddy@recompile.se-20180129192123-y6brq6tnnnxm2oi2
Fix memory leak in plugin-runner (this fixes Debian bug #886595)

* plugin-runner.c (free_plugin): Bug fix: Also free() plugin name.

Show diffs side-by-side

added added

removed removed

Lines of Context:
57
57
sig_atomic_t interrupted_by_signal = 0;
58
58
 
59
59
/* Used by Ubuntu 11.04 (Natty Narwahl) */
60
 
const char plymouth_old_pid[] = "/dev/.initramfs/plymouth.pid";
 
60
const char plymouth_old_old_pid[] = "/dev/.initramfs/plymouth.pid";
61
61
/* Used by Ubuntu 11.10 (Oneiric Ocelot) */
62
 
const char plymouth_pid[] = "/run/initramfs/plymouth.pid";
 
62
const char plymouth_old_pid[] = "/run/initramfs/plymouth.pid";
 
63
/* Used by Debian 9 (stretch) */
 
64
const char plymouth_pid[] = "/run/plymouth/pid";
63
65
 
64
66
const char plymouth_path[] = "/bin/plymouth";
65
67
const char plymouthd_path[] = "/sbin/plymouthd";
282
284
  }
283
285
  /* Try the old pid file location */
284
286
  if(proc_id == 0){
285
 
    pidfile = fopen(plymouth_pid, "r");
 
287
    pidfile = fopen(plymouth_old_pid, "r");
 
288
    if(pidfile != NULL){
 
289
      ret = fscanf(pidfile, "%" SCNuMAX, &proc_id);
 
290
      if(ret != 1){
 
291
        proc_id = 0;
 
292
      }
 
293
      fclose(pidfile);
 
294
    }
 
295
  }
 
296
  /* Try the old old pid file location */
 
297
  if(proc_id == 0){
 
298
    pidfile = fopen(plymouth_old_old_pid, "r");
286
299
    if(pidfile != NULL){
287
300
      ret = fscanf(pidfile, "%" SCNuMAX, &proc_id);
288
301
      if(ret != 1){
299
312
      error_plus(0, errno, "scandir");
300
313
    }
301
314
    if(ret > 0){
302
 
      ret = sscanf(direntries[0]->d_name, "%" SCNuMAX, &proc_id);
303
 
      if(ret < 0){
304
 
        error_plus(0, errno, "sscanf");
 
315
      for(int i = ret-1; i >= 0; i--){
 
316
        if(proc_id == 0){
 
317
          ret = sscanf(direntries[i]->d_name, "%" SCNuMAX, &proc_id);
 
318
          if(ret < 0){
 
319
            error_plus(0, errno, "sscanf");
 
320
          }
 
321
        }
 
322
        free(direntries[i]);
305
323
      }
306
324
    }
307
325
    /* scandir might preallocate for this variable (man page unclear).