mirror of
https://github.com/LibreELEC/LibreELEC.tv.git
synced 2025-07-28 13:16:41 +00:00
libaacs: add upstream patches
This commit is contained in:
parent
10e4b01d5a
commit
3c52d432ea
@ -0,0 +1,52 @@
|
|||||||
|
From 1c0ba6b53759ea57a6146b4ce4d902cfe5c44d3c Mon Sep 17 00:00:00 2001
|
||||||
|
From: Roland Fischer <nalor@gmx.net>
|
||||||
|
Date: Wed, 9 Dec 2015 21:50:43 +0100
|
||||||
|
Subject: [PATCH] Correct debug-log in _find_config_entry
|
||||||
|
|
||||||
|
'discid' sent to BD_DEBUG has not been converted to string before
|
||||||
|
and resulted in a broken output - corrected.
|
||||||
|
---
|
||||||
|
src/libaacs/aacs.c | 7 ++++---
|
||||||
|
1 file changed, 4 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/libaacs/aacs.c b/src/libaacs/aacs.c
|
||||||
|
index ae85612..60e678f 100644
|
||||||
|
--- a/src/libaacs/aacs.c
|
||||||
|
+++ b/src/libaacs/aacs.c
|
||||||
|
@@ -710,6 +710,7 @@ static void _find_config_entry(AACS *aacs, title_entry_list *ce,
|
||||||
|
uint8_t *mk, uint8_t *vuk)
|
||||||
|
{
|
||||||
|
char str[48];
|
||||||
|
+ char str2[48];
|
||||||
|
|
||||||
|
aacs->uks = NULL;
|
||||||
|
aacs->num_uks = 0;
|
||||||
|
@@ -731,7 +732,7 @@ static void _find_config_entry(AACS *aacs, title_entry_list *ce,
|
||||||
|
hexstring_to_hex_array(mk, 16, ce->entry.mek);
|
||||||
|
|
||||||
|
BD_DEBUG(DBG_AACS, "Found media key for %s: %s\n",
|
||||||
|
- ce->entry.discid, str_print_hex(str, mk, 16));
|
||||||
|
+ str_print_hex(str2, ce->entry.discid, 20), str_print_hex(str, mk, 16));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ce->entry.vid) {
|
||||||
|
@@ -739,14 +740,14 @@ static void _find_config_entry(AACS *aacs, title_entry_list *ce,
|
||||||
|
ce->entry.vid);
|
||||||
|
|
||||||
|
BD_DEBUG(DBG_AACS, "Found volume id for %s: %s\n",
|
||||||
|
- ce->entry.discid, str_print_hex(str, aacs->vid, 16));
|
||||||
|
+ str_print_hex(str2, ce->entry.discid, 20), str_print_hex(str, aacs->vid, 16));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ce->entry.vuk) {
|
||||||
|
hexstring_to_hex_array(vuk, 16, ce->entry.vuk);
|
||||||
|
|
||||||
|
BD_DEBUG(DBG_AACS, "Found volume unique key for %s: %s\n",
|
||||||
|
- ce->entry.discid, str_print_hex(str, vuk, 16));
|
||||||
|
+ str_print_hex(str2, ce->entry.discid, 20), str_print_hex(str, vuk, 16));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ce->entry.uk) {
|
||||||
|
--
|
||||||
|
1.7.10.4
|
||||||
|
|
@ -0,0 +1,43 @@
|
|||||||
|
From 7ee3b64639358a35188339f4547f70f7d5c2c9c2 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Roland Fischer <nalor@gmx.net>
|
||||||
|
Date: Wed, 9 Dec 2015 21:51:57 +0100
|
||||||
|
Subject: [PATCH] Always write logentry in case of corrupted disc
|
||||||
|
|
||||||
|
In case of a AACS_ERROR_CORRUPTED_DISC error always write a BD_DEBUG
|
||||||
|
message at DBG_CRIT loglevel.
|
||||||
|
---
|
||||||
|
src/libaacs/aacs.c | 4 +++-
|
||||||
|
1 file changed, 3 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/src/libaacs/aacs.c b/src/libaacs/aacs.c
|
||||||
|
index 60e678f..1bd8ad5 100644
|
||||||
|
--- a/src/libaacs/aacs.c
|
||||||
|
+++ b/src/libaacs/aacs.c
|
||||||
|
@@ -286,6 +286,7 @@ static int _calc_pk_mk(MKB *mkb, dk_list *dkl, uint8_t *mk)
|
||||||
|
num_uvs = len / 5;
|
||||||
|
|
||||||
|
if (num_uvs < 1) {
|
||||||
|
+ BD_DEBUG(DBG_AACS | DBG_CRIT, "No UVS detected - corrupted disc\n");
|
||||||
|
return AACS_ERROR_CORRUPTED_DISC;
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -518,6 +519,7 @@ static int _calc_mk(AACS *aacs, uint8_t *mk, pk_list *pkl, dk_list *dkl)
|
||||||
|
return AACS_ERROR_NO_PK;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ BD_DEBUG(DBG_AACS | DBG_CRIT, "Error calculating media key - corrupted disc\n");
|
||||||
|
return AACS_ERROR_CORRUPTED_DISC;
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -829,7 +831,7 @@ static int _calc_uks(AACS *aacs, config_file *cf)
|
||||||
|
|
||||||
|
file_seek(fp, f_pos, SEEK_SET);
|
||||||
|
if ((file_read(fp, buf, 16)) != 16) {
|
||||||
|
- BD_DEBUG(DBG_AACS, "Unit key %d: read error\n", i);
|
||||||
|
+ BD_DEBUG(DBG_AACS | DBG_CRIT, "Unit key %d: read error\n", i);
|
||||||
|
aacs->num_uks = i;
|
||||||
|
error_code = AACS_ERROR_CORRUPTED_DISC;
|
||||||
|
break;
|
||||||
|
--
|
||||||
|
1.7.10.4
|
||||||
|
|
@ -0,0 +1,114 @@
|
|||||||
|
From 972679a52f6a38f08c0bd0ea5c8a0d4750d6a8e8 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Roland Fischer <nalor@gmx.net>
|
||||||
|
Date: Thu, 10 Dec 2015 20:47:02 +0100
|
||||||
|
Subject: [PATCH] mkb: Fix endless loop in _record
|
||||||
|
|
||||||
|
In case of a corrupt file it could happen that len get 0 in _record
|
||||||
|
and this results in an endless loop.
|
||||||
|
Created an exit condition for this case and fixed related
|
||||||
|
procedures too (they need to cope with the error-return-value
|
||||||
|
from _record).
|
||||||
|
Reason for change: https://github.com/OpenELEC/OpenELEC.tv/pull/4378
|
||||||
|
---
|
||||||
|
src/libaacs/mkb.c | 46 +++++++++++++++++++++++++++++++++++++++-------
|
||||||
|
1 file changed, 39 insertions(+), 7 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/libaacs/mkb.c b/src/libaacs/mkb.c
|
||||||
|
index 275b269..4985c4d 100644
|
||||||
|
--- a/src/libaacs/mkb.c
|
||||||
|
+++ b/src/libaacs/mkb.c
|
||||||
|
@@ -52,6 +52,12 @@ static const uint8_t *_record(MKB *mkb, uint8_t type, size_t *rec_len)
|
||||||
|
return mkb->buf + pos;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ if (len == 0) {
|
||||||
|
+ BD_DEBUG(DBG_MKB, "Couldn't retrieve MKB record 0x%02x - len=0 (%p)\n", type,
|
||||||
|
+ (void*)(mkb->buf + pos));
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
pos += len;
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -108,6 +114,10 @@ uint8_t mkb_type(MKB *mkb)
|
||||||
|
{
|
||||||
|
const uint8_t *rec = _record(mkb, 0x10, NULL);
|
||||||
|
|
||||||
|
+ if (!rec) {
|
||||||
|
+ return 0;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
return MKINT_BE32(rec + 4);
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -115,6 +125,10 @@ uint32_t mkb_version(MKB *mkb)
|
||||||
|
{
|
||||||
|
const uint8_t *rec = _record(mkb, 0x10, NULL);
|
||||||
|
|
||||||
|
+ if (!rec) {
|
||||||
|
+ return 0;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
return MKINT_BE32(rec + 8);
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -152,31 +166,49 @@ const uint8_t *mkb_drive_revokation_entries(MKB *mkb, size_t *len)
|
||||||
|
|
||||||
|
const uint8_t *mkb_subdiff_records(MKB *mkb, size_t *len)
|
||||||
|
{
|
||||||
|
- const uint8_t *rec = _record(mkb, 0x04, len) + 4;
|
||||||
|
- *len -= 4;
|
||||||
|
+ const uint8_t *rec = _record(mkb, 0x04, len);
|
||||||
|
+
|
||||||
|
+ if (rec) {
|
||||||
|
+ rec += 4;
|
||||||
|
+ *len -= 4;
|
||||||
|
+ }
|
||||||
|
|
||||||
|
return rec;
|
||||||
|
}
|
||||||
|
|
||||||
|
const uint8_t *mkb_cvalues(MKB *mkb, size_t *len)
|
||||||
|
{
|
||||||
|
- const uint8_t *rec = _record(mkb, 0x05, len) + 4;
|
||||||
|
- *len -= 4;
|
||||||
|
+ const uint8_t *rec = _record(mkb, 0x05, len);
|
||||||
|
+
|
||||||
|
+ if (rec) {
|
||||||
|
+ rec += 4;
|
||||||
|
+ *len -= 4;
|
||||||
|
+ }
|
||||||
|
|
||||||
|
return rec;
|
||||||
|
}
|
||||||
|
|
||||||
|
const uint8_t *mkb_mk_dv(MKB *mkb)
|
||||||
|
{
|
||||||
|
- return _record(mkb, 0x81, NULL) + 4;
|
||||||
|
+ const uint8_t *rec = _record(mkb, 0x81, NULL);
|
||||||
|
+
|
||||||
|
+ if (rec) {
|
||||||
|
+ rec += 4;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ return rec;
|
||||||
|
}
|
||||||
|
|
||||||
|
const uint8_t *mkb_signature(MKB *mkb, size_t *len)
|
||||||
|
{
|
||||||
|
const uint8_t *rec = _record(mkb, 0x02, len);
|
||||||
|
- *len -= 4;
|
||||||
|
|
||||||
|
- return rec + 4;
|
||||||
|
+ if (rec) {
|
||||||
|
+ rec += 4;
|
||||||
|
+ *len -= 4;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ return rec;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
--
|
||||||
|
1.7.10.4
|
||||||
|
|
Loading…
x
Reference in New Issue
Block a user