[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