Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/usr.sbin/sysinst Fix some uninitialized memory access and a ...



details:   https://anonhg.NetBSD.org/src/rev/6b7d63a42f21
branches:  trunk
changeset: 457615:6b7d63a42f21
user:      martin <martin%NetBSD.org@localhost>
date:      Sun Jul 07 12:58:45 2019 +0000

description:
Fix some uninitialized memory access and a potential buffer overrun on
machines with multiple network interfaces.

diffstat:

 usr.sbin/sysinst/net.c |  34 +++++++++++++++++++++++-----------
 1 files changed, 23 insertions(+), 11 deletions(-)

diffs (82 lines):

diff -r 102b233f84b4 -r 6b7d63a42f21 usr.sbin/sysinst/net.c
--- a/usr.sbin/sysinst/net.c    Sun Jul 07 11:58:44 2019 +0000
+++ b/usr.sbin/sysinst/net.c    Sun Jul 07 12:58:45 2019 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: net.c,v 1.30 2019/06/22 20:46:07 christos Exp $        */
+/*     $NetBSD: net.c,v 1.31 2019/07/07 12:58:45 martin Exp $  */
 
 /*
  * Copyright 1997 Piermont Information Systems Inc.
@@ -241,8 +241,8 @@
        }
 
        buf = malloc (STRSIZE * sizeof(char));
-       for (i = 0, buf_tmp = buf_in; strlen(buf_tmp) > 0 && buf_tmp < buf_in +
-            strlen(buf_in);) {
+       for (i = 0, buf_tmp = buf_in; i < MAX_NETS && strlen(buf_tmp) > 0
+           && buf_tmp < buf_in + strlen(buf_in);) {
                tmp = stpncpy(buf, buf_tmp, strcspn(buf_tmp," \n"));
                *tmp='\0';
                buf_tmp += (strcspn(buf_tmp, " \n") + 1) * sizeof(char);
@@ -485,7 +485,7 @@
        char buffer[STRSIZE];
        struct statvfs sb;
        struct net_desc net_devs[MAX_NETS];
-       menu_ent net_menu[5];
+       menu_ent *net_menu;
        int menu_no;
        int num_devs;
        int selected_net;
@@ -505,7 +505,13 @@
        if (num_devs < 1) {
                /* No network interfaces found! */
                hit_enter_to_continue(NULL, MSG_nonet);
-               return (-1);
+               return -1;
+       }
+
+       net_menu = calloc(num_devs, sizeof(*net_menu));
+       if (net_menu == NULL) {
+               err_msg_win(err_outofmem);
+               return -1;
        }
 
        for (i = 0; i < num_devs; i++) {
@@ -513,18 +519,21 @@
                net_menu[i].opt_flags = OPT_EXIT;
                net_menu[i].opt_action = set_menu_select;
        }
-again:
-       selected_net = -1;
+
        menu_no = new_menu(MSG_netdevs,
                net_menu, num_devs, -1, 4, 0, 0,
                MC_SCROLL,
                NULL, NULL, NULL, NULL, NULL);
+again:
+       selected_net = -1;
        msg_display(MSG_asknetdev);
        process_menu(menu_no, &selected_net);
-       free_menu(menu_no);
-       
-       if (selected_net == -1)
-           return 0;
+
+       if (selected_net == -1) {
+               free_menu(menu_no);
+               free(net_menu);
+               return 0;
+       }
 
        network_up = 1;
        dhcp_config = 0;
@@ -751,6 +760,9 @@
        if (!ask_yesno(MSG_netok_ok))
                goto again;
 
+       free_menu(menu_no);
+       free(net_menu);
+
        run_program(0, "/sbin/ifconfig lo0 127.0.0.1");
 
        /* dhcpcd will have configured it all for us */



Home | Main Index | Thread Index | Old Index