ps->ps_node_init = nd_init;
ps->ps_node_fini = nd_fini;
ps->ps_pool_size = size;
- strncpy(ps->ps_name, name, IBLND_POOL_NAME_LEN);
+ if (strlcpy(ps->ps_name, name, sizeof(ps->ps_name))
+ >= sizeof(ps->ps_name))
+ return -E2BIG;
spin_lock_init(&ps->ps_lock);
CFS_INIT_LIST_HEAD(&ps->ps_pool_list);
CFS_INIT_LIST_HEAD(&ps->ps_failed_pool_list);
cfs_atomic_set(&sn->sn_refcount, 1); /* +1 for caller */
cfs_atomic_set(&sn->sn_brw_errors, 0);
cfs_atomic_set(&sn->sn_ping_errors, 0);
- strncpy(&sn->sn_name[0], name, LST_NAME_SIZE);
+ strlcpy(&sn->sn_name[0], name, sizeof(sn->sn_name));
sn->sn_timer_active = 0;
sn->sn_id = sid;
sfw_session_t *sn = sfw_data.fw_session;
srpc_msg_t *msg = container_of(request, srpc_msg_t,
msg_body.mksn_reqst);
+ int cplen = 0;
if (request->mksn_sid.ses_nid == LNET_NID_ANY) {
reply->mksn_sid = (sn == NULL) ? LST_INVALID_SID : sn->sn_id;
if (!request->mksn_force) {
reply->mksn_status = EBUSY;
- strncpy(&reply->mksn_name[0], &sn->sn_name[0], LST_NAME_SIZE);
+ cplen = strlcpy(&reply->mksn_name[0], &sn->sn_name[0],
+ sizeof(reply->mksn_name));
+ if (cplen >= sizeof(reply->mksn_name))
+ return -E2BIG;
return 0;
}
}
reply->dbg_status = 0;
reply->dbg_sid = sn->sn_id;
reply->dbg_timeout = sn->sn_timeout;
- strncpy(reply->dbg_name, &sn->sn_name[0], LST_NAME_SIZE);
+ if (strlcpy(reply->dbg_name, &sn->sn_name[0], sizeof(reply->dbg_name))
+ >= sizeof(reply->dbg_name))
+ return -E2BIG;
return 0;
}
cache->fci_cache_count = 0;
rwlock_init(&cache->fci_lock);
- strncpy(cache->fci_name, name,
+ strlcpy(cache->fci_name, name,
sizeof(cache->fci_name));
cache->fci_cache_size = cache_size;
/* Get the index from the obd name */
int server_name2index(char *svname, __u32 *idx, char **endptr);
-int server_name2svname(char *label, char *svname, char **endptr);
+int server_name2svname(char *label, char *svname, char **endptr, size_t svsize);
/****************** mount command *********************/
static const char *placement_name[] = {
[PLACEMENT_CHAR_POLICY] = "CHAR",
- [PLACEMENT_NID_POLICY] = "NID"
+ [PLACEMENT_NID_POLICY] = "NID",
+ [PLACEMENT_INVAL_POLICY] = "INVAL"
};
static placement_policy_t placement_name2policy(char *name, int len)
struct lov_ost_data_v1 *objs;
__u32 magic;
int i, rc, lmm_size;
+ int cplen = 0;
ENTRY;
LASSERT(lo);
objs = &lmm->lmm_objects[0];
} else {
struct lov_mds_md_v3 *v3 = (struct lov_mds_md_v3 *) lmm;
- strncpy(v3->lmm_pool_name, lo->ldo_pool, LOV_MAXPOOLNAME);
+ cplen = strlcpy(v3->lmm_pool_name, lo->ldo_pool,
+ sizeof(v3->lmm_pool_name));
+ if (cplen >= sizeof(v3->lmm_pool_name))
+ RETURN(-E2BIG);
objs = &v3->lmm_objects[0];
}
struct dt_object *next = dt_object_child(dt);
struct lov_user_md_v3 *v3;
int rc;
+ int cplen = 0;
ENTRY;
LASSERT(S_ISDIR(dt->do_lu.lo_header->loh_attr));
v3->lmm_stripe_size = cpu_to_le32(lo->ldo_def_stripe_size);
v3->lmm_stripe_count = cpu_to_le16(lo->ldo_def_stripenr);
v3->lmm_stripe_offset = cpu_to_le16(lo->ldo_def_stripe_offset);
- if (lo->ldo_pool)
- strncpy(v3->lmm_pool_name, lo->ldo_pool, LOV_MAXPOOLNAME);
+ if (lo->ldo_pool) {
+ cplen = strlcpy(v3->lmm_pool_name, lo->ldo_pool,
+ sizeof(v3->lmm_pool_name));
+ if (cplen >= sizeof(v3->lmm_pool_name)) {
+ OBD_FREE_PTR(v3);
+ RETURN(-E2BIG);
+ }
+ }
info->lti_buf.lb_buf = v3;
info->lti_buf.lb_len = sizeof(*v3);
struct lov_oinfo *loi;
int i;
__u64 stripe_maxbytes = OBD_OBJECT_EOF;
+ int cplen = 0;
lmm = (struct lov_mds_md_v3 *)lmmv1;
lsm_unpackmd_common(lsm, (struct lov_mds_md_v1 *)lmm);
- strncpy(lsm->lsm_pool_name, lmm->lmm_pool_name, LOV_MAXPOOLNAME);
+ cplen = strlcpy(lsm->lsm_pool_name, lmm->lmm_pool_name,
+ sizeof(lsm->lsm_pool_name));
+ if (cplen >= sizeof(lsm->lsm_pool_name))
+ return -E2BIG;
for (i = 0; i < lsm->lsm_stripe_count; i++) {
/* XXX LOV STACKING call down to osc_unpackmd() */
struct lov_ost_data_v1 *lmm_objects;
int lmm_size, lmm_magic;
int i;
+ int cplen = 0;
ENTRY;
if (lsm) {
lmmv1->lmm_pattern = cpu_to_le32(lsm->lsm_pattern);
lmmv1->lmm_layout_gen = cpu_to_le16(lsm->lsm_layout_gen);
if (lsm->lsm_magic == LOV_MAGIC_V3) {
- strncpy(lmmv3->lmm_pool_name, lsm->lsm_pool_name,
- LOV_MAXPOOLNAME);
+ cplen = strlcpy(lmmv3->lmm_pool_name, lsm->lsm_pool_name,
+ sizeof(lmmv3->lmm_pool_name));
+ if (cplen >= sizeof(lmmv3->lmm_pool_name))
+ RETURN(-E2BIG);
lmm_objects = lmmv3->lmm_objects;
} else {
lmm_objects = lmmv1->lmm_objects;
int lmm_magic;
__u16 stripe_count;
int rc;
+ int cplen = 0;
ENTRY;
rc = lov_lum_swab_if_needed(lumv3, &lmm_magic, lump);
if (rc >= 0) {
(*lsmp)->lsm_oinfo[0]->loi_ost_idx = lumv1->lmm_stripe_offset;
(*lsmp)->lsm_stripe_size = lumv1->lmm_stripe_size;
- if (lmm_magic == LOV_USER_MAGIC_V3)
- strncpy((*lsmp)->lsm_pool_name, lumv3->lmm_pool_name,
- LOV_MAXPOOLNAME);
+ if (lmm_magic == LOV_USER_MAGIC_V3) {
+ cplen = strlcpy((*lsmp)->lsm_pool_name,
+ lumv3->lmm_pool_name,
+ sizeof((*lsmp)->lsm_pool_name));
+ if (cplen >= sizeof((*lsmp)->lsm_pool_name))
+ rc = -E2BIG;
+ }
rc = 0;
}
RETURN(-ENOMEM);
if (!IS_SERVER(lsi)) {
- pos = sprintf(inst, "%p", cfg->cfg_instance);
+ pos = snprintf(inst, CFS_PAGE_SIZE, "%p", cfg->cfg_instance);
+ if (pos >= CFS_PAGE_SIZE) {
+ OBD_FREE(inst, CFS_PAGE_SIZE);
+ return -E2BIG;
+ }
} else {
LASSERT(IS_MDT(lsi));
- rc = server_name2svname(lsi->lsi_svname, inst, NULL);
+ rc = server_name2svname(lsi->lsi_svname, inst, NULL,
+ CFS_PAGE_SIZE);
if (rc) {
OBD_FREE(inst, CFS_PAGE_SIZE);
RETURN(-EINVAL);
body = req_capsule_client_get(&req->rq_pill, &RMF_MGS_CONFIG_BODY);
LASSERT(body != NULL);
LASSERT(sizeof(body->mcb_name) > strlen(cld->cld_logname));
- strncpy(body->mcb_name, cld->cld_logname, sizeof(body->mcb_name));
+ if (strlcpy(body->mcb_name, cld->cld_logname, sizeof(body->mcb_name))
+ >= sizeof(body->mcb_name))
+ GOTO(out, rc = -E2BIG);
body->mcb_offset = cfg->cfg_last_idx + 1;
body->mcb_type = cld->cld_type;
body->mcb_bits = CFS_PAGE_SHIFT;
struct mgs_thread_info *mgi = mgs_env_info(env);
struct lustre_cfg *lcfg;
int rc;
+ int cplen = 0;
if (flags & CM_START)
fsdb->fsdb_gen++;
mgi->mgi_marker.cm_step = fsdb->fsdb_gen;
mgi->mgi_marker.cm_flags = flags;
mgi->mgi_marker.cm_vers = LUSTRE_VERSION_CODE;
- strncpy(mgi->mgi_marker.cm_tgtname, tgtname,
- sizeof(mgi->mgi_marker.cm_tgtname));
- strncpy(mgi->mgi_marker.cm_comment, comment,
- sizeof(mgi->mgi_marker.cm_comment));
+ cplen = strlcpy(mgi->mgi_marker.cm_tgtname, tgtname,
+ sizeof(mgi->mgi_marker.cm_tgtname));
+ if (cplen >= sizeof(mgi->mgi_marker.cm_tgtname))
+ return -E2BIG;
+ cplen = strlcpy(mgi->mgi_marker.cm_comment, comment,
+ sizeof(mgi->mgi_marker.cm_comment));
+ if (cplen >= sizeof(mgi->mgi_marker.cm_comment))
+ return -E2BIG;
mgi->mgi_marker.cm_createtime = cfs_time_current_sec();
mgi->mgi_marker.cm_canceltime = 0;
lustre_cfg_bufs_reset(&mgi->mgi_bufs, NULL);
2: found mdc;
*/
static int last_step = -1;
+ int cplen = 0;
ENTRY;
(marker->cm_flags & CM_START) &&
!(marker->cm_flags & CM_SKIP)) {
got_an_osc_or_mdc = 1;
- strncpy(tmti->mti_svname, marker->cm_tgtname,
- sizeof(tmti->mti_svname));
+ cplen = strlcpy(tmti->mti_svname, marker->cm_tgtname,
+ sizeof(tmti->mti_svname));
+ if (cplen >= sizeof(tmti->mti_svname))
+ RETURN(-E2BIG);
rc = record_start_log(env, mgs, &mdt_llh,
mti->mti_svname);
if (rc)
OBD_ALLOC_PTR(mti);
if (!mti)
GOTO(out, rc = -ENOMEM);
- strncpy(mti->mti_fsname, fsname, MTI_NAME_MAXLEN);
- strncpy(mti->mti_svname, devname, MTI_NAME_MAXLEN);
- strncpy(mti->mti_params, param, sizeof(mti->mti_params));
+ if (strlcpy(mti->mti_fsname, fsname, sizeof(mti->mti_fsname))
+ >= sizeof(mti->mti_fsname))
+ GOTO(out, rc = -E2BIG);
+ if (strlcpy(mti->mti_svname, devname, sizeof(mti->mti_svname))
+ >= sizeof(mti->mti_svname))
+ GOTO(out, rc = -E2BIG);
+ if (strlcpy(mti->mti_params, param, sizeof(mti->mti_params))
+ >= sizeof(mti->mti_params))
+ GOTO(out, rc = -E2BIG);
rc = server_name2index(mti->mti_svname, &mti->mti_stripe_index, &tmp);
if (rc < 0)
/* Not a valid server; may be only fsname */
* PG_writeback without risking other layers deciding to skip this
* page.
*/
+ if (crt >= CRT_NR)
+ return -EINVAL;
result = cl_page_invoke(env, io, pg, CL_PAGE_OP(io[crt].cpo_prep));
if (result == 0)
cl_page_io_start(env, pg, crt);
}
cl_page_state_set(env, pg, CPS_CACHED);
+ if (crt >= CRT_NR)
+ return;
CL_PAGE_INVOID_REVERSE(env, pg, CL_PAGE_OP(io[crt].cpo_completion),
(const struct lu_env *,
const struct cl_page_slice *, int), ioret);
PINVRNT(env, pg, crt < CRT_NR);
ENTRY;
+ if (crt >= CRT_NR)
+ RETURN(-EINVAL);
result = CL_PAGE_INVOKE(env, pg, CL_PAGE_OP(io[crt].cpo_make_ready),
(const struct lu_env *,
const struct cl_page_slice *));
ENTRY;
+ if (crt >= CRT_NR)
+ RETURN(-EINVAL);
+
cfs_list_for_each_entry(scan, &pg->cp_layers, cpl_linkage) {
if (scan->cpl_ops->io[crt].cpo_cache_add == NULL)
continue;
rc = llog_init_handle(env, loghandle, LLOG_F_IS_PLAIN, NULL);
if (rc < 0) {
llog_close(env, loghandle);
+ loghandle = NULL;
RETURN(rc);
}
ENTRY;
if (rec->lrh_type != LLOG_LOGID_MAGIC) {
- CERROR("%s: invalid record in catalog\n",
- loghandle->lgh_ctxt->loc_obd->obd_name);
+ CERROR("invalid record in catalog\n");
RETURN(-EINVAL);
}
CDEBUG(D_HA, "processing log "LPX64":%x at index %u of catalog "
* rc < 0 on error
* if endptr isn't NULL it is set to end of fsname *
*/
-int server_name2svname(char *label, char *svname, char **endptr)
+int server_name2svname(char *label, char *svname, char **endptr, size_t svsize)
{
int rc;
char *dash;
if (*dash != '-')
return -1;
- strncpy(svname, dash + 1, MTI_NAME_MAXLEN);
+ if (strlcpy(svname, dash + 1, svsize) >= svsize)
+ return -E2BIG;
return 0;
}
{
lnet_process_id_t id;
int rc, i = 0;
+ int cplen = 0;
ENTRY;
if (!IS_SERVER(lsi))
RETURN(-EINVAL);
- strncpy(mti->mti_svname, lsi->lsi_svname, sizeof(mti->mti_svname));
+ if (strlcpy(mti->mti_svname, lsi->lsi_svname, sizeof(mti->mti_svname))
+ >= sizeof(mti->mti_svname))
+ RETURN(-E2BIG);
mti->mti_nid_count = 0;
while (LNetGetId(i++, &id) != -ENOENT) {
mti->mti_flags = lsi->lsi_flags & LDD_F_MASK;
if (mti->mti_flags & (LDD_F_WRITECONF | LDD_F_VIRGIN))
mti->mti_flags |= LDD_F_UPDATE;
- strncpy(mti->mti_params, lsi->lsi_lmd->lmd_params,
- sizeof(mti->mti_params));
+ cplen = strlcpy(mti->mti_params, lsi->lsi_lmd->lmd_params,
+ sizeof(mti->mti_params));
+ if (cplen >= sizeof(mti->mti_params))
+ return -E2BIG;
return 0;
}
ent->lde_reclen = cpu_to_le16(lu_dirent_calc_size(namelen, attr));
strncpy(ent->lde_name, name, namelen);
+ ent->lde_name[namelen] = '\0';
ent->lde_namelen = cpu_to_le16(namelen);
/* append lustre attributes */
{
struct osd_device *osd = osd_dev(d);
- strncpy(osd->od_svname, name, MAX_OBD_NAME);
+ if (strlcpy(osd->od_svname, name, sizeof(osd->od_svname))
+ >= sizeof(osd->od_svname))
+ return -E2BIG;
return osd_procfs_init(osd, name);
}
struct lu_device *l = osd2lu_dev(o);
struct osd_thread_info *info;
int rc;
+ int cplen = 0;
/* if the module was re-loaded, env can loose its keys */
rc = lu_env_refill((struct lu_env *) env);
if (rc < 0)
GOTO(out_mnt, rc);
- strncpy(o->od_svname, lustre_cfg_string(cfg, 4),
- sizeof(o->od_svname) - 1);
+ cplen = strlcpy(o->od_svname, lustre_cfg_string(cfg, 4),
+ sizeof(o->od_svname));
+ if (cplen >= sizeof(o->od_svname)) {
+ rc = -E2BIG;
+ GOTO(out_mnt, rc);
+ }
rc = osd_obj_map_init(o);
if (rc != 0)
static inline struct iam_ikey *iam_path_ikey(const struct iam_path *path,
int nr)
{
- assert(0 <= nr && nr < ARRAY_SIZE(path->ip_data->ipd_key_scratch));
+ LASSERT(0 <= nr && nr < ARRAY_SIZE(path->ip_data->ipd_key_scratch));
return path->ip_data->ipd_key_scratch[nr];
}
OBD_ALLOC_PTR(conf_tgt);
if (conf_tgt) {
- strncpy(conf_tgt->sct_name, name, sizeof(conf_tgt->sct_name));
+ strlcpy(conf_tgt->sct_name, name, sizeof(conf_tgt->sct_name));
sptlrpc_rule_set_init(&conf_tgt->sct_rset);
cfs_list_add(&conf_tgt->sct_list, &conf->sc_tgts);
}
qsd->qsd_started = false;
/* copy service name */
- strncpy(qsd->qsd_svname, svname, MAX_OBD_NAME);
+ if (strlcpy(qsd->qsd_svname, svname, sizeof(qsd->qsd_svname))
+ >= sizeof(qsd->qsd_svname))
+ GOTO(out, rc = -E2BIG);
/* grab reference on osd device */
lu_device_get(&dev->dd_lu_dev);
maxgroups = sysconf(_SC_NGROUPS_MAX);
if (maxgroups > NGROUPS_MAX)
maxgroups = NGROUPS_MAX;
+ if (maxgroups == -1) {
+ rc = -EINVAL;
+ goto out;
+ }
size = offsetof(struct identity_downcall_data, idd_groups[maxgroups]);
data = malloc(size);
pclose(fp);
return 1;
}
- i = fread(debugfs_cmd, 1, sizeof(debugfs_cmd), fp);
+ i = fread(debugfs_cmd, 1, sizeof(debugfs_cmd) - 1, fp);
if (i) {
debugfs_cmd[i] = 0;
fprintf(stderr, "%s", debugfs_cmd);
fprintf(stderr, "%s: %s\n", progname, strerror(errno));
return 0;
}
- ret = fread(supp_features, 1, sizeof(supp_features), fp);
+ ret = fread(supp_features, 1, sizeof(supp_features) - 1, fp);
+ supp_features[ret] = '\0';
fclose(fp);
}
if (ret > 0 && strstr(supp_features,
char cmd[PATH_MAX];
FILE *fp;
char enabled_features[4096] = "";
+ int ret = 1;
snprintf(cmd, sizeof(cmd), "%s -R features %s 2>&1",
DEBUGFS, devpath);
return 0;
}
- fread(enabled_features, 1, sizeof(enabled_features), fp);
+ ret = fread(enabled_features, 1, sizeof(enabled_features) - 1, fp);
+ enabled_features[ret] = '\0';
fclose(fp);
if (strstr(enabled_features, feature))