diff --git a/SOURCES/librtas-2.0.1-rtas-call.patch b/SOURCES/librtas-2.0.1-rtas-call.patch new file mode 100644 index 0000000..346689d --- /dev/null +++ b/SOURCES/librtas-2.0.1-rtas-call.patch @@ -0,0 +1,107 @@ +From 26970c42bc017ad68b864e7134cf941c07443aa8 Mon Sep 17 00:00:00 2001 +From: Chris Engel +Date: Tue, 22 Aug 2017 14:59:06 -0500 +Subject: [PATCH] Interface for ibm,physical-attestation rtas call + +The physical attestation interfaces are provided to allow a +trusted 3rd party client to retrieve information about the +trusted boot state of the target PowerVM system. This makes +use of the systems physical TPM(s). These TPM(s) are used +by system firmware to extend measurements during the +boot process. + +Signed-off-by: Chris Engel +Reviewed-by: Vasant Hegde +Signed-off-by: Tyrel Datwyler +--- + librtas_src/librtas.h | 2 ++ + librtas_src/syscall_calls.c | 63 +++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 65 insertions(+) + +diff --git a/librtas_src/librtas.h b/librtas_src/librtas.h +index ccab3d9..b84fab1 100644 +--- a/librtas_src/librtas.h ++++ b/librtas_src/librtas.h +@@ -105,6 +105,8 @@ extern int rtas_set_time(uint32_t year, uint32_t month, uint32_t day, + extern int rtas_suspend_me(uint64_t streamid); + extern int rtas_update_nodes(char *workarea, unsigned int scope); + extern int rtas_update_properties(char *workarea, unsigned int scope); ++extern int rtas_physical_attestation(char *workarea, int seq_num, ++ int *next_seq_num, int *work_area_bytes); + + #ifdef __cplusplus + } +diff --git a/librtas_src/syscall_calls.c b/librtas_src/syscall_calls.c +index a194e4b..35b6d66 100644 +--- a/librtas_src/syscall_calls.c ++++ b/librtas_src/syscall_calls.c +@@ -1329,3 +1329,66 @@ int rtas_update_properties(char *workarea, unsigned int scope) + dbg("(%p) %d = %d\n", workarea, scope, rc ? rc : status); + return rc ? rc : status; + } ++ ++/** ++ * rtas_physical_attestation ++ * @brief Interface for ibm,physical-attestation rtas call. ++ * ++ * @param workarea input/output work area for rtas call ++ * @param seq_num sequence number of the rtas call ++ * @param next_seq_num next sequence number ++ * @param work_area_bytes size of work area ++ * @return 0 on success, !0 on failure ++ */ ++int rtas_physical_attestation(char *workarea, int seq_num, int *next_seq_num, ++ int *work_area_bytes) ++{ ++ uint32_t workarea_pa; ++ uint64_t elapsed = 0; ++ void *kernbuf; ++ int kbuf_sz = 4096; ++ int rc, status; ++ int resp_bytes = *work_area_bytes; ++ ++ rc = sanity_check(); ++ if (rc) ++ return rc; ++ ++ /* Caller provided more data than FW can handle */ ++ if (*work_area_bytes == 0 || ++ *work_area_bytes > kbuf_sz) ++ return RTAS_IO_ASSERT; ++ ++ rc = rtas_get_rmo_buffer(kbuf_sz, &kernbuf, &workarea_pa); ++ if (rc) ++ return rc; ++ memcpy(kernbuf, workarea, *work_area_bytes); ++ ++ do { ++ rc = rtas_call("ibm,physical-attestation", 3, 3, ++ htobe32(workarea_pa), htobe32(kbuf_sz), ++ htobe32(seq_num), ++ &status, next_seq_num, &resp_bytes); ++ if (rc < 0) ++ break; ++ ++ rc = handle_delay(status, &elapsed); ++ } while (rc == CALL_AGAIN); ++ ++ *next_seq_num = be32toh(*next_seq_num); ++ ++ /* FW returned more data than we can handle */ ++ if (be32toh(resp_bytes) > *work_area_bytes) { ++ (void)rtas_free_rmo_buffer(kernbuf, workarea_pa, kbuf_sz); ++ return RTAS_IO_ASSERT; ++ } ++ ++ *work_area_bytes = be32toh(resp_bytes); ++ ++ if (rc == 0) ++ memcpy(workarea, kernbuf, *work_area_bytes); ++ ++ (void)rtas_free_rmo_buffer(kernbuf, workarea_pa, kbuf_sz); ++ ++ return rc ? rc : status; ++} +-- +2.9.5 + diff --git a/SPECS/librtas.spec b/SPECS/librtas.spec index 15393d0..895e12a 100644 --- a/SPECS/librtas.spec +++ b/SPECS/librtas.spec @@ -1,7 +1,7 @@ Summary: Libraries to provide access to RTAS calls and RTAS events Name: librtas Version: 2.0.1 -Release: 1%{?dist} +Release: 2%{?dist} URL: http://librtas.ozlabs.org License: LGPL Group: System Environment/Libraries @@ -12,6 +12,7 @@ BuildRequires: autoconf BuildRequires: libtool Patch0: librtas-2.0.1-libversion.patch +Patch1: librtas-2.0.1-rtas-call.patch Obsoletes: librtas(ppc) ExclusiveArch: ppc64 ppc64le @@ -38,6 +39,7 @@ developing programs using librtas. %prep %setup -q -n %{name}-%{version} %patch0 -p1 -b .ln +%patch1 -p1 -b .rtas %build ./autogen.sh @@ -73,6 +75,9 @@ rm -f %{buildroot}/%{_docdir}/librtas/* %{_includedir}/librtasevent_v6.h %changelog +* Wed Sep 13 2017 Sinny Kumari 2.0.1-2 +- Resolves: #1457407 - Apply feature from librtas-2.0.1-rtas-call.patch + * Fri Mar 17 2017 Sinny Kumari 2.0.1-1 - Resolves: #1380656 Rebase to 2.0.1