Nel tuo codice sia il semaforo che m sono variabili locali ai singoli processi, non c'è alcuna condivisione - ti limiti a creare la memoria condivisa ma non ci fai niente.

Per fare quello che chiedi, devi creare sia m che il semaforo come puntatori, e farli puntare all'interno dell'area di memoria condivisa (occhio che tra l'altro il secondo parametro di sem_init deve essere 1 per semafori condivisi tra processi).
Tra l'altro, tutto sommato conviene creare e agganciare il segmento di memoria condivisa prima della fork, tanto le "view" del segmento condiviso sono ereditate dai processi figli.