[Ninux-Wireless] Impalla sistema senza privilegi in user space
Massimiliano CARNEMOLLA
massimiliano a null.net
Dom 14 Apr 2019 18:52:06 CEST
Compilato con
gcc servermp.c -o smp.o
avviandolo impalla il sistema operativo.
L'unico modo per risolvere e' spegnere il computer tenendo premuto il
tasto di accensione.
Qualcuno e' in grado di capire perche' questo codice produce questa
problematica ?
Come puo' un buon sistema operativo farsi mettere in ginocchio da due
righe di codice scritte male ?
-------------- parte successiva --------------
#include<stdio.h>
#include<stdlib.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<string.h>
#include <arpa/inet.h>
#include <fcntl.h> // for open
#include <unistd.h> // for close
#include <sys/types.h>
#include<pthread.h>
void socketThread(int clientSocket)
{
char client_message[2000];
char buffer[1024];
pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;
int newSocket = clientSocket;
recv(newSocket , client_message , 2000 , 0);
// Send message to the client socket
char *message = malloc(sizeof(client_message)+20);
strcpy(message,"Hello Client : ");
strcat(message,client_message);
strcat(message,"\n");
strcpy(buffer,message);
free(message);
pthread_mutex_unlock(&lock);
sleep(1);
send(newSocket,buffer,13,0);
printf("Exit socketThread \n");
close(newSocket);
}
int main(){
int serverSocket, newSocket;
struct sockaddr_in serverAddr;
struct sockaddr_storage serverStorage;
socklen_t addr_size;
pid_t pid[50];
//Create the socket.
serverSocket = socket(PF_INET, SOCK_STREAM, 0);
// Configure settings of the server address struct
// Address family = Internet
serverAddr.sin_family = AF_INET;
//Set port number, using htons function to use proper byte order
serverAddr.sin_port = htons(7799);
//Set IP address to localhost
serverAddr.sin_addr.s_addr = inet_addr("127.0.0.1");
//Set all bits of the padding field to 0
memset(serverAddr.sin_zero, '\0', sizeof serverAddr.sin_zero);
//Bind the address struct to the socket
bind(serverSocket, (struct sockaddr *) &serverAddr, sizeof(serverAddr));
//Listen on the socket, with 40 max connection requests queued
if(listen(serverSocket,50)==0)
printf("Listening\n");
else
printf("Error\n");
pthread_t tid[60];
int i = 0;
while(1)
{
/*---- Accept call creates a new socket for the incoming connection ----*/
addr_size = sizeof serverStorage;
newSocket = (serverSocket, (struct sockaddr *) &serverStorage, &addr_size);
int pid_c = 0;
if ((pid_c = fork())==0)
{
socketThread(newSocket);
}
else
{
pid[i++] = pid_c;
if( i >= 49)
{
i = 0;
while(i < 50)
waitpid(pid[i++], NULL, 0);
i = 0;
}
}
}
return 0;
}
-------------- parte successiva --------------
Un allegato non testuale รจ stato rimosso....
Nome: smp.o
Tipo: application/octet-stream
Dimensione: 9388 bytes
Descrizione: non disponibile
URL: <https://ml.ninux.org/pipermail/wireless/attachments/20190414/91659ff4/attachment.o>
Maggiori informazioni sulla lista
Wireless