This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: US-CERT Vulnerability Note VU#162289


Rupert Wood wrote:
Nicola Musatti wrote:

_main PROC

; 12   : 	char * b = "0123456789"; ; 13   : 	for ( int l = 0; l < 1
<< 30; ++l ) ; 14   : 		f(b, l); ; 15   : }

xor eax, eax ret 0 _main ENDP

Note that it optimised away your whole program! It could blank out f() because it never needed to call it.

That's true, although f() was still compiled to the equivalent of 'return 0;'.
This can be made more evident by changing f() to


#include <iostream>

int f(char *buf, int len) {
	int res = 0;
	len = 1 << 30;
	if (buf + len < buf)
		res =  1;
	std::cout << res << '\n';
	return res;
}

The resulting f() amounts to

std::cout << 0 << '\n';
return 0;

Which is still inlined into main().
Cheers,
Nicola
--
Nicola.Musatti <at> gmail <dot> com
Home: http://nicola.musatti.googlepages.com/home
Blog: http://wthwdik.wordpress.com/


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]