Citation: 6B_960/2017 E. 5

Le recours doit être partiellement admis (cf. consid. 1.5 supra), l'arrêt attaqué annulé et la cause renvoyée à l'autorité cantonale pour nouvelle décision. Pour le surplus, le recours doit être rejeté. Le recourant, qui n'obtient que partiellement gain de cause, supportera une partie des frais judiciaires (art. 66 al. 1 LTF). Il peut prétendre à des dépens réduits, à la charge du canton de Genève (art. 68 al. 1 LTF). Sa requête d'assistance judiciaire est sans objet dans la mesure où le recourant a droit à des dépens; elle doit être rejetée pour le reste, dès lors que le recours était dénué de chances de succès s'agissant des aspects sur lesquels le recourant a succombé (art. 64 al. 1 LTF).