MCPcopy Create free account
hub / github.com/F-Stack/f-stack / mac_getsockopt_peerlabel

Function mac_getsockopt_peerlabel

freebsd/security/mac/mac_socket.c:596–633  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

594}
595
596int
597mac_getsockopt_peerlabel(struct ucred *cred, struct socket *so,
598 struct mac *mac)
599{
600 char *elements, *buffer;
601 struct label *intlabel;
602 int error;
603
604 if (!(mac_labeled & MPC_OBJECT_SOCKET))
605 return (EINVAL);
606
607 error = mac_check_structmac_consistent(mac);
608 if (error)
609 return (error);
610
611 elements = malloc(mac->m_buflen, M_MACTEMP, M_WAITOK);
612 error = copyinstr(mac->m_string, elements, mac->m_buflen, NULL);
613 if (error) {
614 free(elements, M_MACTEMP);
615 return (error);
616 }
617
618 buffer = malloc(mac->m_buflen, M_MACTEMP, M_WAITOK | M_ZERO);
619 intlabel = mac_socket_label_alloc(M_WAITOK);
620 SOCK_LOCK(so);
621 mac_socket_copy_label(so->so_peerlabel, intlabel);
622 SOCK_UNLOCK(so);
623 error = mac_socketpeer_externalize_label(intlabel, elements, buffer,
624 mac->m_buflen);
625 mac_socket_label_free(intlabel);
626 if (error == 0)
627 error = copyout(buffer, mac->m_string, strlen(buffer)+1);
628
629 free(buffer, M_MACTEMP);
630 free(elements, M_MACTEMP);
631
632 return (error);
633}

Callers 1

sogetoptFunction · 0.85

Calls 9

mallocFunction · 0.85
mac_socket_label_allocFunction · 0.85
mac_socket_copy_labelFunction · 0.85
mac_socket_label_freeFunction · 0.85
copyinstrFunction · 0.50
freeFunction · 0.50
copyoutFunction · 0.50

Tested by

no test coverage detected