[Bug c/78981] New: Sign extension bug when stdlib is not explicitly included while using getenv on amd64.
rwincey at securifera dot com
gcc-bugzilla@gcc.gnu.org
Tue Jan 3 16:23:00 GMT 2017
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78981
Bug ID: 78981
Summary: Sign extension bug when stdlib is not explicitly
included while using getenv on amd64.
Product: gcc
Version: 5.4.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c
Assignee: unassigned at gcc dot gnu.org
Reporter: rwincey at securifera dot com
Target Milestone: ---
When compiling the following program using
gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.4)
#include <stdio.h>
#include <stdint.h>
//#include <stdlib.h>
#include <unistd.h>
int main( int argc, const char **argv, const char **envp ){
char *src;
close(0);
src = getenv("QUERY_STRING");
if( !src )
exit(1);
puts("Content-Type: text/html\r\n\r");
puts("<center><br><br><br>");
printf("Input %s", src);
return 0;
}
The compiler adds an unnecessary sign extension instruction after the call to
getenv (cdqe), which in my case was changing the address from 0x7fffffffef3b to
0xffffffffffffef3b.
After some troubleshooting it was discovered that this was due to stdlib.h not
explicitly being defined as an include.
This bug has the potential to cause significant security implications depending
on what operations follow the sign extension. It is suggested that the compiler
either errors out completed during compilation if stdlib is not included, or
properly includes the correct library which will not cause the sign extension
assembly instruction to be added.
More information about the Gcc-bugs
mailing list