diff options
Diffstat (limited to 'usr/src/cmd')
| -rw-r--r-- | usr/src/cmd/zoneadmd/zoneadmd.c | 3 | ||||
| -rw-r--r-- | usr/src/cmd/zonecfg/Makefile | 1 | ||||
| -rw-r--r-- | usr/src/cmd/zonecfg/zonecfg.c | 25 |
3 files changed, 22 insertions, 7 deletions
diff --git a/usr/src/cmd/zoneadmd/zoneadmd.c b/usr/src/cmd/zoneadmd/zoneadmd.c index ede1917d51..0a714fda38 100644 --- a/usr/src/cmd/zoneadmd/zoneadmd.c +++ b/usr/src/cmd/zoneadmd/zoneadmd.c @@ -765,7 +765,8 @@ static void set_zonecfg_env(char *rsrc, char *attr, char *name, char *val) { char *p; - char nm[MAXNAMELEN]; + /* Enough for maximal name, rsrc + attr, & slop for ZONECFG & _'s */ + char nm[2 * MAXNAMELEN + 32]; if (attr == NULL) (void) snprintf(nm, sizeof (nm), "_ZONECFG_%s_%s", rsrc, diff --git a/usr/src/cmd/zonecfg/Makefile b/usr/src/cmd/zonecfg/Makefile index 94d725776b..e364a59679 100644 --- a/usr/src/cmd/zonecfg/Makefile +++ b/usr/src/cmd/zonecfg/Makefile @@ -38,6 +38,7 @@ MAPOPTS = $(MAPFILES:%=-M%) LFLAGS = -t YFLAGS = -d -b zonecfg_grammar LDLIBS += -lzonecfg -ll -lnsl -ltecla -lzfs -lbrand -ldladm -linetutil -luuid +CFLAGS += -DYYLMAX=2048 CPPFLAGS += -I. LDFLAGS += $(MAPOPTS) CLEANFILES += zonecfg_lex.c zonecfg_grammar.tab.c zonecfg_grammar.tab.h diff --git a/usr/src/cmd/zonecfg/zonecfg.c b/usr/src/cmd/zonecfg/zonecfg.c index 41423c95cd..8c318c547e 100644 --- a/usr/src/cmd/zonecfg/zonecfg.c +++ b/usr/src/cmd/zonecfg/zonecfg.c @@ -1000,7 +1000,8 @@ path_find(const char *name) } static FILE * -pager_open(void) { +pager_open(void) +{ FILE *newfp; char *pager, *space; @@ -1026,7 +1027,8 @@ pager_open(void) { } static void -pager_close(FILE *fp) { +pager_close(FILE *fp) +{ int status; status = pclose(fp); @@ -2467,8 +2469,13 @@ do_res_attr(struct zone_res_attrtab **headp, complex_property_ptr_t cpp) pt_to_str(PT_NAME)); goto bad; } - (void) strlcpy(np->zone_res_attr_name, cp->cp_value, - sizeof (np->zone_res_attr_name)); + if (strlcpy(np->zone_res_attr_name, cp->cp_value, + sizeof (np->zone_res_attr_name)) >= + sizeof (np->zone_res_attr_name)) { + zerr(gettext("Input for %s is too long"), + pt_to_str(PT_NAME)); + goto bad; + } seen_name = B_TRUE; break; case PT_VALUE: @@ -2477,8 +2484,14 @@ do_res_attr(struct zone_res_attrtab **headp, complex_property_ptr_t cpp) pt_to_str(PT_VALUE)); goto bad; } - (void) strlcpy(np->zone_res_attr_value, cp->cp_value, - sizeof (np->zone_res_attr_value)); + if (strlcpy(np->zone_res_attr_value, cp->cp_value, + sizeof (np->zone_res_attr_value)) >= + sizeof (np->zone_res_attr_value)) { + zerr(gettext("Input for %s is too long"), + pt_to_str(PT_VALUE)); + goto bad; + } + seen_value = B_TRUE; break; default: |
