[dm-crypt] Question about "An example of using LUKS device through libcryptsetup API"

Milan Broz gmazyland at gmail.com
Sat Sep 26 08:11:51 CEST 2015


On 09/26/2015 03:03 AM, H McCurdy wrote:
> Hi,
> 
> The program code is published at
> https://gitlab.com/cryptsetup/cryptsetup/wikis/API/index.html
> 
> Looking in 
> 
> static int handle_active_device(const char *device_name)
> 
> at
>         if (crypt_status(cd, device_name) == CRYPT_ACTIVE)
>                 printf("Device %s is still active.\n", device_name);
>         else {
>                 printf("Something failed perhaps, device %s is not active.\n", device_name);
>                 crypt_free(cd);
>                 return -1;
>         }
> 
>         /*
>          * crypt_deactivate() is used to deactivate device
>          */
>         r = crypt_deactivate(cd, device_name);
>         if (r < 0) {
>                 printf("crypt_deactivate() failed.\n");
>                 crypt_free(cd);
>                 return r;
>         }
> 
> But if I look in /usr/include/libcryptsetup.h, I see
> 
> typedef enum {
>   CRYPT_INVALID, /**< device mapping is invalid in this context */
>   CRYPT_INACTIVE, /**< no such mapped device */
>   CRYPT_ACTIVE, /**< device is active */
>   CRYPT_BUSY /**< device is active and has open count > 0 */
> } crypt_status_info;
> 
> and
> 
> crypt_status_info crypt_status(struct crypt_device *cd, const char *name);
> 
> It appears to me that the code flow is good since we probably can't deactivate a busy container
> but it appears to me that the error is misleading in the event of CRYPT_BUSY because the message
> indicates the device isn't active.
> 
> Am I interpreting correctly?

Yes, that example should probably handle busy device differently.

Anyway, you will receive error message "Device ... is still in use." before the printf above.

Milan


More information about the dm-crypt mailing list