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

Function mac_getsockopt_label

freebsd/security/mac/mac_socket.c:558–594  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

556}
557
558int
559mac_getsockopt_label(struct ucred *cred, struct socket *so, struct mac *mac)
560{
561 char *buffer, *elements;
562 struct label *intlabel;
563 int error;
564
565 if (!(mac_labeled & MPC_OBJECT_SOCKET))
566 return (EINVAL);
567
568 error = mac_check_structmac_consistent(mac);
569 if (error)
570 return (error);
571
572 elements = malloc(mac->m_buflen, M_MACTEMP, M_WAITOK);
573 error = copyinstr(mac->m_string, elements, mac->m_buflen, NULL);
574 if (error) {
575 free(elements, M_MACTEMP);
576 return (error);
577 }
578
579 buffer = malloc(mac->m_buflen, M_MACTEMP, M_WAITOK | M_ZERO);
580 intlabel = mac_socket_label_alloc(M_WAITOK);
581 SOCK_LOCK(so);
582 mac_socket_copy_label(so->so_label, intlabel);
583 SOCK_UNLOCK(so);
584 error = mac_socket_externalize_label(intlabel, elements, buffer,
585 mac->m_buflen);
586 mac_socket_label_free(intlabel);
587 if (error == 0)
588 error = copyout(buffer, mac->m_string, strlen(buffer)+1);
589
590 free(buffer, M_MACTEMP);
591 free(elements, M_MACTEMP);
592
593 return (error);
594}
595
596int
597mac_getsockopt_peerlabel(struct ucred *cred, struct socket *so,

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