Project

General

Profile

« Previous | Next » 

Revision c5b8e57a

Added by Jim Pingle over 2 years ago

Improve validation and escaping of bridge interfaces. Fixes #14052

View differences:

src/etc/inc/interfaces.inc
753 753

  
754 754
function interface_bridge_configure_stp($bridge) {
755 755
	if (isset($bridge['enablestp'])) {
756
		$bridgeif = trim($bridge['bridgeif']);
756
		$bridgeif = escapeshellarg(trim($bridge['bridgeif']));
757 757
		/* configure spanning tree proto */
758 758
		mwexec("/sbin/ifconfig {$bridgeif} proto " . escapeshellarg($bridge['proto']));
759 759

  
......
811 811
}
812 812

  
813 813
function interface_bridge_configure_advanced($bridge) {
814
	$bridgeif = trim($bridge['bridgeif']);
814
	$bridgeif = escapeshellarg(trim($bridge['bridgeif']));
815 815

  
816 816
	if ($bridge['maxaddr'] <> "") {
817 817
		mwexec("/sbin/ifconfig {$bridgeif} maxaddr " . escapeshellarg($bridge['maxaddr']));
......
871 871
}
872 872

  
873 873
function interface_bridge_configure_ip6linklocal($bridge) {
874
	$bridgeif = trim($bridge['bridgeif']);
874
	$bridgeif = escapeshellarg(trim($bridge['bridgeif']));
875 875

  
876 876
	$members = explode(',', $bridge['members']);
877 877
	if (!count($members)) {
......
884 884

  
885 885
	mwexec("/usr/sbin/ndp -i {$bridgeif} -- {$bridgeop}auto_linklocal");
886 886
	foreach ($members as $member) {
887
		$realif = get_real_interface($member);
887
		$realif = escapeshellarg(get_real_interface($member));
888 888
		mwexec("/usr/sbin/ndp -i {$realif} -- {$memberop}auto_linklocal");
889 889
	}
890 890
}
src/usr/local/www/interfaces_bridge_edit.php
356 356
			$bridge['autoptp'] = implode(',', $_POST['autoptp']);
357 357
		}
358 358

  
359
		$bridge['bridgeif'] = $_POST['bridgeif'];
359
		if (empty($_POST['bridgeif']) ||
360
		    preg_match("/^bridge[0-9]+$/", $_POST['bridgeif'])) {
361
			/* Attempt initial configuration of the bridge if the
362
			 * submitted interface is empty or looks like a bridge
363
			 * interface. */
364
			$bridge['bridgeif'] = $_POST['bridgeif'];
365
			interface_bridge_configure($bridge);
366
		} else {
367
			$input_errors[] = gettext("Invalid bridge interface.");
368
		}
360 369

  
361
		interface_bridge_configure($bridge);
362
		if ($bridge['bridgeif'] == "" || !stristr($bridge['bridgeif'], "bridge")) {
370
		if (empty($bridge['bridgeif']) ||
371
		    !preg_match("/^bridge[0-9]+$/", $bridge['bridgeif'])) {
363 372
			$input_errors[] = gettext("Error occurred creating interface, please retry.");
364 373
		} else {
365 374

  

Also available in: Unified diff