[Bug 274860] multimedia/libaacs - Failure to open device and read files/play movie on blu-ray disk

From: <bugzilla-noreply_at_freebsd.org>
Date: Thu, 02 Nov 2023 02:17:33 UTC
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=274860

            Bug ID: 274860
           Summary: multimedia/libaacs - Failure to open device and read
                    files/play movie on blu-ray disk
           Product: Ports & Packages
           Version: Latest
          Hardware: amd64
                OS: Any
            Status: New
          Severity: Affects Some People
          Priority: ---
         Component: Individual Port(s)
          Assignee: ports-bugs@FreeBSD.org
          Reporter: luckandfortune.1@gmail.com

The first error from BD_DEBUG is:
"aacs.c:464: Unable to open AACS/Content000.cer"

This comes from: file/file_posix.c
and the function: *_file_open
BD_DEBUG(DBG_FILE, "Error opening file %s\n", filename).

The call which fails is "open(filename, flags, mode)"
where flags is O_RDONLY, and mode is 0

Inserting  a call to perror() shows that the error is "Not a directory"
the first filepath which fails to open is: /dev/cd0/AACS/Content000.cer

running "file -s /dev/cd0" results in "/dev/cd0: data"
Attempting to mount the disc fails.

I'm not sure what the cause of this error is, or the right way to correct it. I
suspect it's related to mounting the disc, but I figured it might be worth
logging as a bug, as the disc will play without needing to mount it under
certain circumstances described below.

--- Additional detail where the disc plays ---
Using vlc
1. Compile multimedia/vlc with blu-ray support enabled.

2. Acquire information required to use libaacs with the disc:
  2.a. Device Key
  2.b. Processing keys
  2.c. Host Certificate
  2.d. Volume unique key (VUK) for the disc in question

3. Place required information in $HOME/.config/aacs/KEYDB.cfg.

4. Play the Disc:
   a. Insert disc into blu-ray player
   b. Play the disc using vlc
     i.  Click "Media" > "Open Disc" > "Blu-ray"
     ii. Choose disc device to be /dev/cd0

The player will play the disc, If the file $HOME/.config/aacs/KEYDB.cfg
contains a VUK for the disc being played. (a light on the blu-ray player
indicates it is being used) If not, it will give the stated error.

-- Additional Considerations --
1. Excluded hardware issues by passing through the blu-ray player to Linux
using passthrough on a Linux bhyve VM. Linux, using vlc and libaacs, does play
the disc by calculating the VUK using the other information. The above
description of where the disc plays and errors are based on testing with
FreeBSD.

2.
a. aacs_info, called alone, fails to get information from the disc, when using
a KEYDB.cfg file that includes a VUK, producing the following:

aacs_info /dev/cd0 $HOME/.config/aacs/KEYDB.cfg -> results in
Opening /dev/cd0 using libaacs 0.11.1 ...
aacs.c:464: Unable to open AACS/Content000.cer
aacs.c:464: Unable to open AACS/Content001.cer
aacs.c:1143: Failed to read content certificate file
aacs.c:1152: Failed to read Bus Encryption Enabled flag from content
certificate file
aacs.c:464: Unable to open AACS/Unit_Key_RO.inf
aacs.c:464: Unable to open AACS/DUPLICATE/Unit_Key_RO.inf
aacs.c:1121: Failed to read unit key file (AACS/Unit_Key_RO.inf)
libaacs open failed: Corrupt disc
mmc_device_linux.c:188: Only block devices supported
aacs.c:1545: aacs_get_vid() failed

By way of clarification, the errors are a result of the call to "open" failing.
The disc is not corrupt.

b. bd_info, from libbluray, does succeed.
bd_info /dev/cd0 $HOME/.config/aacs/KEYDB.cfg -> results in aacs_handled : yes

So a circumstance where playback works is that vlc will play a movie using the
hardware, without mounting the disc, through libbluray, if a VUK is in
KEYDB.cfg.

-- 
You are receiving this mail because:
You are the assignee for the bug.