On Thu, Oct 27, 2016 at 04:55:28PM +0800, tang.wenji@xxxxxxxxxx wrote: ACK -Ben > From: 10111224 <tang.wenji@xxxxxxxxxx> > > Segment faulty occured when executing "mpathpersist -i -k > /dev/mapper/mpath1" command.The reason is that an uninitialized global variable conf is used in mpath_persistent_reserve_in(). The same problem also exists in > mpath_persistent_reserve_out(). > > Signed-off-by: tang.wenji <tang.wenji@xxxxxxxxxx> > --- > libmpathpersist/mpath_persist.c | 21 +++++++++++++++++++-- > libmpathpersist/mpathpr.h | 4 ---- > 2 files changed, 19 insertions(+), 6 deletions(-) > > diff --git a/libmpathpersist/mpath_persist.c b/libmpathpersist/mpath_persist.c > index 7501651..582d4ef 100644 > --- a/libmpathpersist/mpath_persist.c > +++ b/libmpathpersist/mpath_persist.c > @@ -78,6 +78,7 @@ updatepaths (struct multipath * mpp) > int i, j; > struct pathgroup * pgp; > struct path * pp; > + struct config *conf; > > if (!mpp->pg) > return 0; > @@ -97,16 +98,24 @@ updatepaths (struct multipath * mpp) > continue; > } > pp->mpp = mpp; > + conf = get_multipath_config(); > pathinfo(pp, conf, DI_ALL); > + put_multipath_config(conf); > continue; > } > pp->mpp = mpp; > if (pp->state == PATH_UNCHECKED || > - pp->state == PATH_WILD) > + pp->state == PATH_WILD){ > + conf = get_multipath_config(); > pathinfo(pp, conf, DI_CHECKER); > + put_multipath_config(conf); > + } > > - if (pp->priority == PRIO_UNDEF) > + if (pp->priority == PRIO_UNDEF){ > + conf = get_multipath_config(); > pathinfo(pp, conf, DI_PRIO); > + put_multipath_config(conf); > + } > } > } > return 0; > @@ -159,8 +168,11 @@ int mpath_persistent_reserve_in (int fd, int rq_servact, > int map_present; > int major, minor; > int ret; > + struct config *conf; > > + conf = get_multipath_config(); > conf->verbosity = verbose; > + put_multipath_config( conf); > > if (fstat( fd, &info) != 0){ > condlog(0, "stat error %d", fd); > @@ -252,8 +264,11 @@ int mpath_persistent_reserve_out ( int fd, int rq_servact, int rq_scope, > int j; > unsigned char *keyp; > uint64_t prkey; > + struct config *conf; > > + conf = get_multipath_config(); > conf->verbosity = verbose; > + put_multipath_config(conf); > > if (fstat( fd, &info) != 0){ > condlog(0, "stat error fd=%d", fd); > @@ -320,7 +335,9 @@ int mpath_persistent_reserve_out ( int fd, int rq_servact, int rq_scope, > goto out1; > } > > + conf = get_multipath_config(); > select_reservation_key(conf, mpp); > + put_multipath_config(conf); > > switch(rq_servact) > { > diff --git a/libmpathpersist/mpathpr.h b/libmpathpersist/mpathpr.h > index cd58201..e6c2ded 100644 > --- a/libmpathpersist/mpathpr.h > +++ b/libmpathpersist/mpathpr.h > @@ -25,10 +25,6 @@ struct threadinfo { > struct prout_param param; > }; > > - > -struct config * conf; > - > - > int prin_do_scsi_ioctl(char * dev, int rq_servact, struct prin_resp * resp, int noisy); > int prout_do_scsi_ioctl( char * dev, int rq_servact, int rq_scope, > unsigned int rq_type, struct prout_param_descriptor *paramp, int noisy); > -- > 2.8.1.windows.1 > > -- > dm-devel mailing list > dm-devel@xxxxxxxxxx > https://www.redhat.com/mailman/listinfo/dm-devel -- dm-devel mailing list dm-devel@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/dm-devel