Discussione: Web server in c
View Single Post
Old 06-06-2007, 15:57   #2
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Codice:
	len = read(sockmsg,input,sizeof(input));
Il valore di ritorno chi lo controlla?
Codice:
	input[len]='\0';
Buffer overflow se len=256. Metti nella read sizeof(input)-1.
Codice:
		if (pthread_create(&mythread,NULL,gestore_richiesta,&sockmsg))
Race grossolana. Passi il _puntatore_ a sockmsg al secondo thread, ma sockmsg è una variabile del primo thread che può venire modificata senza preavviso!
Codice:
		close(sockmsg);
Ecco l'origine dei tuoi guai. I thread condividono la tabella degli fd!

Quote:
len: 16777215 msg: 4��G,�� ��(H��thread -1209660512: ho chiuso la
19777215 vale 0x00ffffff. Dieci a uno che la read ha ritornato -1 a causa della close(sockmsg), e tu hai scritto input[-1] = '\0'.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso