Option to drop LD_PRELOAD from emulated environment, by Lauri Leukkunen.
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@2985 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
		
							parent
							
								
									ffb04fcf08
								
							
						
					
					
						commit
						b12b6a188e
					
				@ -1671,6 +1671,7 @@ void usage(void)
 | 
				
			|||||||
           "-L path           set the elf interpreter prefix (default=%s)\n"
 | 
					           "-L path           set the elf interpreter prefix (default=%s)\n"
 | 
				
			||||||
           "-s size           set the stack size in bytes (default=%ld)\n"
 | 
					           "-s size           set the stack size in bytes (default=%ld)\n"
 | 
				
			||||||
           "-cpu model        select CPU (-cpu ? for list)\n"
 | 
					           "-cpu model        select CPU (-cpu ? for list)\n"
 | 
				
			||||||
 | 
					           "-drop-ld-preload  drop LD_PRELOAD for target process\n"
 | 
				
			||||||
           "\n"
 | 
					           "\n"
 | 
				
			||||||
           "debug options:\n"
 | 
					           "debug options:\n"
 | 
				
			||||||
#ifdef USE_CODE_COPY
 | 
					#ifdef USE_CODE_COPY
 | 
				
			||||||
@ -1702,6 +1703,8 @@ int main(int argc, char **argv)
 | 
				
			|||||||
    int optind;
 | 
					    int optind;
 | 
				
			||||||
    const char *r;
 | 
					    const char *r;
 | 
				
			||||||
    int gdbstub_port = 0;
 | 
					    int gdbstub_port = 0;
 | 
				
			||||||
 | 
					    int drop_ld_preload = 0, environ_count = 0;
 | 
				
			||||||
 | 
					    char **target_environ, **wrk, **dst;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (argc <= 1)
 | 
					    if (argc <= 1)
 | 
				
			||||||
        usage();
 | 
					        usage();
 | 
				
			||||||
@ -1774,6 +1777,8 @@ int main(int argc, char **argv)
 | 
				
			|||||||
#endif
 | 
					#endif
 | 
				
			||||||
                _exit(1);
 | 
					                _exit(1);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					        } else if (!strcmp(r, "drop-ld-preload")) {
 | 
				
			||||||
 | 
					            drop_ld_preload = 1;
 | 
				
			||||||
        } else 
 | 
					        } else 
 | 
				
			||||||
#ifdef USE_CODE_COPY
 | 
					#ifdef USE_CODE_COPY
 | 
				
			||||||
        if (!strcmp(r, "no-code-copy")) {
 | 
					        if (!strcmp(r, "no-code-copy")) {
 | 
				
			||||||
@ -1802,11 +1807,31 @@ int main(int argc, char **argv)
 | 
				
			|||||||
    env = cpu_init();
 | 
					    env = cpu_init();
 | 
				
			||||||
    global_env = env;
 | 
					    global_env = env;
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    if (loader_exec(filename, argv+optind, environ, regs, info) != 0) {
 | 
					    wrk = environ;
 | 
				
			||||||
 | 
					    while (*(wrk++))
 | 
				
			||||||
 | 
					        environ_count++;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    target_environ = malloc((environ_count + 1) * sizeof(char *));
 | 
				
			||||||
 | 
					    if (!target_environ)
 | 
				
			||||||
 | 
					        abort();
 | 
				
			||||||
 | 
					    for (wrk = environ, dst = target_environ; *wrk; wrk++) {
 | 
				
			||||||
 | 
					        if (drop_ld_preload && !strncmp(*wrk, "LD_PRELOAD=", 11))
 | 
				
			||||||
 | 
					            continue;
 | 
				
			||||||
 | 
					        *(dst++) = strdup(*wrk);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    dst = NULL; /* NULL terminate target_environ */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (loader_exec(filename, argv+optind, target_environ, regs, info) != 0) {
 | 
				
			||||||
        printf("Error loading %s\n", filename);
 | 
					        printf("Error loading %s\n", filename);
 | 
				
			||||||
        _exit(1);
 | 
					        _exit(1);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    for (wrk = target_environ; *wrk; wrk++) {
 | 
				
			||||||
 | 
					        free(*wrk);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    free(target_environ);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (loglevel) {
 | 
					    if (loglevel) {
 | 
				
			||||||
        page_dump(logfile);
 | 
					        page_dump(logfile);
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user