Возможно ли проверить права на ioctl

#c #c #linux #ioctl

#c #c #linux #ioctl

Вопрос:

Я пишу систему настройки сети для встроенного устройства, которое использует вызовы ioctl. При запуске системы мне нужно проверить права на будущие вызовы. Можно ли проверить, достаточно или недостаточно привилегий для ioctl(ID) вызова, не вызывая этот ioctl?

Ответ №1:

Я не знаю, соответствует ли это вашему вопросу, но вы смотрели о возможностях?

 if (!CAP_IS_SUPPORTED(CAP_NET_ADMIN)){ 
     EXIT_FAIL("Capability CAP_NET_ADMIN is not supportedn");
}
  

Извлечено из man :

 ... 
CAP_NET_ADMIN
 Perform various network-related operations:     
   * interface configuration;
   * administration of IP firewall, masquerading, and accounting
   * modify routing tables;
   * bind to any address for transparent proxying;
   * set type-of-service (TOS)
   * clear driver statistics;
   * set promiscuous mode;
   * enabling multicasting;
...
  

Перейдите в эту справку

Ответ №2:

Это действительно звучит как плохой дизайн, вы не можете проверить «право на будущие вызовы», поскольку что-то может измениться. В конце концов, это будущее, поэтому его действительно трудно предсказать, и многие технические решения лучше даже не пытаться.

Если вы выполняете вызов, думая, что он «должен» быть успешным, и он каким-либо образом завершается неудачей, вам все равно нужно это обработать. Таким образом, вы могли бы также обработать сбой разрешений и не утруждать себя попытками проверить это заранее.

Комментарии:

1. конечно, я должен проверить результат ioctls, но при запуске я хочу провести самодиагностику